JIT संकलन और स्तरीय संकलन
जानिए कि JVM पहले हॉट विधियों की व्याख्या कैसे करता है, फिर JIT-संकलित कैसे करता है, और संकलन को कैसे शुरू व देखा जाता है
JIT संकलन और स्तरीय संकलन, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
इंटरप्रेटर बनाम जेआईटी
JVM शुरू में बाइटकोड की व्याख्या करता है। जब किसी विधि का बार-बार आह्वान किया जाता है (वह हॉट हो जाती है), तो जेआईटी कंपाइलर उसे बहुत तेज़ निष्पादन के लिए नेटिव मशीन कोड में संकलित करता है।
स्तरीय संकलन (Java 8 से डिफ़ॉल्ट)
स्तरीय संकलन पाँच स्तरों का उपयोग करता है: T0 (इंटरप्रेटर), T1 (C1 सरल), T2 (C1 सीमित प्रोफ़ाइलिंग), T3 (C1 पूर्ण प्रोफ़ाइलिंग), T4 (C2 पूर्णतः अनुकूलित)। विधियाँ अधिक हॉट होने पर ऊँचे स्तरों पर जाती हैं।
// Enable/disable tiered compilation:
// -XX:+TieredCompilation (default ON in Java 8+)
// -XX:-TieredCompilation (disables — only C2 used)C1 कंपाइलर (क्लाइंट कंपाइलर)
C1 मध्यम अनुकूलन के साथ तेज़ी से संकलन करता है। यह C2 के लिए आह्वान की आवृत्तियों और शाखा के परिणामों को मापने हेतु प्रोफ़ाइलिंग साधन जोड़ता है।
C2 कंपाइलर (सर्वर कंपाइलर)
C2 (Opto) गहन अनुकूलन करता है: इनलाइनिंग, एस्केप विश्लेषण, लूप अनरोलिंग, वेक्टरकरण और निष्प्रयोज्य कोड हटाना। यह सबसे तेज़ नेटिव कोड बनाता है, लेकिन इसे संकलित होने में अधिक समय लगता है।
// Force server JIT only:
java -server MyApp
// Or explicitly:
java -XX:-TieredCompilation MyApp // uses C2 only (warm-up is slower)हॉटस्पॉट सीमा
आह्वान काउंटर की सीमा पार करने के बाद किसी विधि को जेआईटी में संकलित किया जाता है। डिफ़ॉल्ट: 10,000 आह्वान (C2)। इसे -XX:CompileThreshold=N से समायोजित करें।
// Lower threshold for faster warm-up (at cost of less optimization):
java -XX:CompileThreshold=1000 MyAppइनलाइनिंग
इनलाइनिंग C2 का सबसे प्रभावशाली अनुकूलन है: हॉट कोड से आह्वान की जाने वाली छोटी विधियों की प्रतिलिपि सीधे आह्वान स्थल पर रख दी जाती है। इससे विधि प्रेषण का अतिरिक्त खर्च समाप्त होता है और आगे के अनुकूलन संभव होते हैं।
// Check inlining decisions:
java -XX:+PrintInlining -XX:+UnlockDiagnosticVMOptions MyApp
// Output:
// @ 5 com.example.User::getName (5 bytes) inlinedएस्केप विश्लेषण
यदि C2 यह निर्धारित कर ले कि कोई वस्तु वर्तमान विधि (या थ्रेड) से बाहर नहीं जाती, तो वह उसे हीप के बजाय स्टैक पर आवंटित कर सकता है — इससे कचरा-संग्रहण पर पड़ने वाला दबाव पूरी तरह समाप्त हो जाता है।
// Objects that don't escape are stack-allocated:
String result = new StringBuilder().append("Hello ").append(name).toString();
// The StringBuilder may be eliminated by escape analysisजेआईटी संकलन लॉग
प्रत्येक विधि के संकलित होने पर उसका लॉग लिखने के लिए -XX:+PrintCompilation का उपयोग करें। आउटपुट में विधि का नाम, स्तर और संकलन फ़्लैग दिखाई देते हैं।
// java -XX:+PrintCompilation MyApp
// Output:
// 1 n java.lang.String::hashCode (0 bytes)
// 25 3 com.example.UserService::findById (42 bytes)
// 31 4 com.example.UserService::findById (42 bytes) made not entrantडीऑप्टिमाइज़ेशन
यदि जेआईटी की कोई धारणा गलत साबित होती है (उदाहरण के लिए, कोई ऐसा वर्ग लोड हो जाता है जो आह्वान स्थल के रिसीवर का प्रकार बदल देता है), तो C2 डीऑप्टिमाइज़ करता है — यानी इंटरप्रेटर या C1 पर वापस चला जाता है। यह सामान्य है और आमतौर पर पारदर्शी रहता है।
वार्म-अप समय
जेआईटी संकलन में समय लगता है। अल्पकालिक प्रक्रियाओं में विधियाँ कभी भी जेआईटी में संकलित नहीं हो सकतीं। तेज़ स्टार्टअप के लिए समय से पहले संकलन (GraalVM नेटिव इमेज) का उपयोग करें या Class Data Sharing (CDS) के साथ जेआईटी परिणामों को कैश करें।
// Enable AppCDS to cache JIT-compilable classes:
java -XX:ArchiveClassesAtExit=app.jsa -cp app.jar MyApp # generate archive
java -XX:SharedArchiveFile=app.jsa -cp app.jar MyApp # use archiveGraalVM जेआईटी
GraalVM C2 की जगह Java में लिखे गए जेआईटी का उपयोग करता है। इससे बेहतर अनुकूलन, गैर-Java भाषाओं के लिए जेआईटी का उपयोग करने की क्षमता और Native Image (समय से पहले संकलन) का आधार मिलता है।
त्वरित जाँच
वह जेआईटी संकलन तकनीक कौन-सी है जो छोटी विधियों को कॉल करने वाली विधि में मिला देकर विधि आह्वान का अतिरिक्त खर्च समाप्त करती है?
पुनरावलोकन
स्तरीय संकलन विधियों को C1 (तेज़ संकलन, प्रोफ़ाइलिंग) से C2 (गहन अनुकूलन) तक ले जाता है। मुख्य अनुकूलन: इनलाइनिंग, एस्केप विश्लेषण, लूप अनरोलिंग। जेआईटी के निर्णय देखने के लिए -XX:+PrintCompilation का उपयोग करें। बेंचमार्क करने से पहले वार्म-अप करें।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “JIT संकलन और स्तरीय संकलन” पाठ निःशुल्क है?
हाँ—“JIT संकलन और स्तरीय संकलन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“JIT संकलन और स्तरीय संकलन” में मैं क्या सीखूँगा?
जानिए कि JVM पहले हॉट विधियों की व्याख्या कैसे करता है, फिर JIT-संकलित कैसे करता है, और संकलन को कैसे शुरू व देखा जाता है आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“JIT संकलन और स्तरीय संकलन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Class Loading Phases: Load, Link, Initialize
- ClassLoader Hierarchy और Custom Loaders
- javap से बाइटकोड का निरीक्षण
- JIT संकलन और स्तरीय संकलन