Java Academy · पाठ

javap से बाइटकोड का निरीक्षण

Java संरचनाओं के बाइटकोड में रूपांतरण को समझने के लिए javap -c से class फ़ाइलों को डीकम्पाइल कीजिए

पाठ 3, कुल 4 में से13 चरण

javap से बाइटकोड का निरीक्षण, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

बाइटकोड का निरीक्षण क्यों करें?

बाइटकोड को समझने से पता चलता है कि JVM आपके Java कोड को वास्तव में कैसे चलाता है। इससे प्रदर्शन संबंधी समस्याओं को डीबग करने, कंपाइलर के अनुकूलनों को समझने और यह जाँचने में सहायता मिलती है कि सिंथेटिक कोड (लैम्ब्डा, आंतरिक वर्ग) अपेक्षा के अनुसार काम करता है।

javap का मूल उपयोग

javap ClassName वर्ग का सार्वजनिक प्रोग्रामिंग इंटरफ़ेस (विधि हस्ताक्षर, फ़ील्ड घोषणाएँ) दिखाता है। यह वर्तमान निर्देशिका या क्लासपाथ से .class फ़ाइल पढ़ता है।

# Compile first:
javac User.java
# Display public API:
javap User
# Output:
# public class User {
#   public java.lang.String getName();
#   public int getAge();
# }

-c से बाइटकोड को डिसअसेंबल करना

javap -c User प्रत्येक विधि के लिए JVM निर्देश-समुच्चय (ऑपकोड) दिखाता है। निष्पादन प्रवाह समझने के लिए यह मुख्य दृश्य है।

# javap -c User
# public java.lang.String getName();
#   Code:
#      0: aload_0
#      1: getfield      #2  // Field name:Ljava/lang/String;
#      4: areturn

-v के साथ विस्तृत आउटपुट

javap -v User स्थिरांक पूल, अभिगम फ़्लैग, स्टैक आकार और अपवाद तालिका भी दिखाता है — गहन विश्लेषण और ClassCastException की डीबगिंग के लिए यह आवश्यक है।

# javap -v User
# Constant pool:
#    #1 = Methodref  #5.#22  // java/lang/Object."<init>":()V
#    #2 = Fieldref   #4.#23  // User.name:Ljava/lang/String;
# ...

सामान्य बाइटकोड निर्देश

सबसे अधिक उपयोग होने वाले ऑपकोड जानें: aload_0 (this लोड करना), getfield, putfield, invokevirtual, invokespecial (कंस्ट्रक्टर/निजी), invokestatic, invokedynamic (लैम्ब्डा), return, areturn।

लैम्ब्डा और invokedynamic

लैम्ब्डा अभिव्यक्तियाँ invokedynamic निर्देशों में संकलित होती हैं। पहला आह्वान किसी वर्ग को बनाने के लिए LambdaMetafactory का उपयोग करता है; बाद के आह्वान उसी वर्ग का पुनः उपयोग करते हैं। javap -v बूटस्ट्रैप विधि तालिका दिखाता है।

// Java:
list.forEach(s -> System.out.println(s));
// Compiles to invokedynamic — javap shows:
// invokedynamic #4,0  // InvokeDynamic #0:accept:()Ljava/util/function/Consumer;

स्ट्रिंग संयोजन का अनुकूलन

आधुनिक javac StringBuilder के बजाय "Hello " + name के लिए invokedynamic का उपयोग करता है। javap -v StringConcatFactory की बूटस्ट्रैप विधि दिखाता है।

// Java 9+ string concat:
String s = "Hello " + name;
// Compiles to:
// invokedynamic #5,0  // InvokeDynamic #1:makeConcatWithConstants

आंतरिक वर्ग की पहुँच देखना

जब कोई बाहरी वर्ग किसी आंतरिक वर्ग के निजी फ़ील्ड तक पहुँचता है (या इसके विपरीत), तो कंपाइलर सिंथेटिक access$000 विधियाँ बनाता है। javap -p (निजी सदस्य) इन्हें दिखाता है।

# javap -p OuterClass
# static int access$000(OuterClass);
# -- synthetic bridge method generated by the compiler

ऑटोबॉक्सिंग की लागत जाँचना

ऑटोबॉक्सिंग का संकलन Integer.valueOf() या int.intValue() आह्वानों में होता है। बॉक्सिंग हो रही है या नहीं, यह सुनिश्चित करने के लिए javap -c का उपयोग करें और तय करें कि मूल प्रकारों का उपयोग करना चाहिए या नहीं।

// Java:
List<Integer> list = new ArrayList<>();
list.add(42); // autoboxing
// Bytecode:
// bipush 42
// invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

बाइटकोड से अपवाद-प्रबंधन पढ़ना

अपवाद हैंडलर अपवाद तालिका में प्रविष्टियों के रूप में दिखाई देते हैं, जिन्हें javap -v से देखा जा सकता है। प्रत्येक प्रविष्टि प्रयास-खंड का आरंभ, अंत, हैंडलर और पकड़े गए प्रकार को दिखाती है।

# Exception table:
# from    to  target  type
#    2    10      15  Class java/io/IOException
# -- means: if IOException in bytes 2-10, jump to handler at byte 15

वर्ग फ़ाइल का शीर्षलेख

वर्ग फ़ाइल के शीर्षलेख में मैजिक नंबर (CAFEBABE), मुख्य/गौण संस्करण और अभिगम फ़्लैग होते हैं। javap -v मुख्य संस्करण दिखाता है, जो उस Java रिलीज़ से संबंधित होता है जिसमें वर्ग का संकलन हुआ था।

# javap -v User
# minor version: 0
# major version: 61   <- Java 17
# flags: ACC_PUBLIC, ACC_SUPER

त्वरित जाँच

कौन-सा javap फ़्लैग प्रत्येक विधि के JVM ऑपकोड दिखाता है?

पुनरावलोकन

ऑपकोड के लिए javap -c और पूर्ण विवरण के लिए javap -v का उपयोग करें। मुख्य ऑपकोड जानें: invokevirtual, invokespecial, invokedynamic, getfield। कंपाइलर के आउटपुट को समझने के लिए लैम्ब्डा, बॉक्सिंग और स्ट्रिंग संयोजन का निरीक्षण करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “javap से बाइटकोड का निरीक्षण” पाठ निःशुल्क है?

हाँ—“javap से बाइटकोड का निरीक्षण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“javap से बाइटकोड का निरीक्षण” में मैं क्या सीखूँगा?

Java संरचनाओं के बाइटकोड में रूपांतरण को समझने के लिए javap -c से class फ़ाइलों को डीकम्पाइल कीजिए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“javap से बाइटकोड का निरीक्षण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Class Loading Phases: Load, Link, Initialize
  2. ClassLoader Hierarchy और Custom Loaders
  3. javap से बाइटकोड का निरीक्षण
  4. JIT संकलन और स्तरीय संकलन
← Java Academy पर वापस जाएँ