2013-05-08 4 views
24

मैं वास्तव में निम्नलिखित बातक्या JVM का प्रयोग होता है, तो JIT मशीन के निर्देशों के अनुरूप काम बाईटकोड रूपांतरण

पहले मैं जानता हूँ कि समझने के लिए संघर्ष कर रहा है:

जब एक जावा प्रोग्राम संकलित किया गया है .class फ़ाइल उत्पन्न हो जाएगा । उस कोड में बाइट्स के रूप में है। फिर JVM उस बाइट कोड को मशीन समझने योग्य प्रारूप में अनुवादित करेगा।

अब मैं देख रहा हूँ one of the questions in SO

एक में बस-इन-समय (JIT) संकलक रन-टाइम दुभाषिया की एक विशेषता है, कि बजाय बाईटकोड हर बार एक विधि शुरू हो जाती है की व्याख्या की, होगा मशीन कोड में बाईटकोड संकलन

तो यहाँ JIT मशीन निर्देशों के बाईटकोड परिवर्तित चल मशीन के निर्देश। फिर जेवीएम का उपयोग क्या है। हम इसे जेआईटी के साथ करने में सक्षम हैं। मेरे ज्ञान में जेआईटी केवल जेवीएम के प्रदर्शन में सुधार के लिए है।

अग्रिम धन्यवाद ..

उत्तर

2

स्पष्ट है:

JVM करता है सब कुछ की तरह:

यह ऑपरेटिंग सिस्टम के शीर्ष पर रहता है और संकलित जावा कार्यक्रम के बीच अमूर्त प्रदान करता है और ऑपरेटिंग सिस्टम। इस तरह, जावा संकलित प्रोग्राम को चिंता करने की ज़रूरत नहीं है कि किस प्लेटफ़ॉर्म के पास कार्य है। जावा प्रोग्राम बाइटकोड में कोड संकलित करता है जो JVM समझ और निष्पादित कर सकता है।

JIT

JVM वर्ग फ़ाइल को संकलित करता है, यह पूर्ण वर्ग फ़ाइल को पूरा नहीं करता है; यह आवश्यकता के आधार पर इसका केवल एक हिस्सा संकलित करता है। यह पूरे स्रोत कोड के पार्सिंग से बचाता है। इस प्रकार के संकलन को जेआईटी या जस्ट-इन-टाइम संकलन कहा जाता है। JVM मंच (ओएस) निर्भर कोड पीढ़ी JIT मंच ओरिएंटेड है,, देशी बाइट कोड उत्पन्न करता है तो यह तेजी से होता है की तुलना में JVM :)

+0

लेकिन मुझे लगता है कि जेआईटी एक बार पूरी कक्षा फाइल को संकलित करता है। लेकिन आपके कथन में जेवीएम संकलन कर रहा है। कृपया – Anusha

+0

@Anusha yah समझाएं ... JVM संकलन भाग [रेखा से रेखा] जावा के लिए मूल दुभाषिया है .. लेकिन जेआईटी एक वैकल्पिक है, जो संकलित करता है, सबकुछ सिर्फ एक आवश्यक तरीकों/कार्यों में नहीं। किसी मामले के लिए विचार करें: जेआईटी कंपाइलर जावा सीमा परिस्थितियों जैसे नल पॉइंटर या सरणी सीमाओं के बाहर सरणी की जांच नहीं करता है। एकमात्र तरीका जेआईटी कंपाइलर जानता है कि इसमें एक शून्य सूचक अपवाद है ऑपरेटिंग सिस्टम द्वारा उठाए गए सिग्नल द्वारा। –

+0

यह सिर्फ गलत है। जावा जावा कंपाइलर जावा स्रोत कोड को पार करता है और इसे जावा बाइटकोड (मशीन स्वतंत्र), आपकी .class फ़ाइलों में संकलित करता है। जेआईटी कंपाइलर संकलित करता है कि मूल मशीन कोड (सीपीयू आर्क विशिष्ट) के लिए बाइटकोड। जेआईटी आउटपुट मशीन कोड अभी भी सीमा जांच और जावा अपवाद हैंडलिंग करता है। – arjunyg

1

यह संकलित सिर्फ अनुकूलन के साथ JVM के लिए समय में एक।

21

जेआईटी जेवीएम का हिस्सा है। अन्य भागों में बाइटकोड दुभाषिया, वर्ग लोडिंग सत्यापन और लिंकिंग तंत्र, और प्रतिबिंब, आई/ओ आदि जैसे सामानों के लिए मूल कोड समर्थन शामिल है।

उस अर्थ में, जेआईटी जेवीएम को तेजी से चलाने में सक्षम नहीं है। इसके बजाए यह जावा कोड तेजी से चलाता है ... अगर ऐसा होता है तो JVM ने इसका अर्थ समझा होगा।

असल में, JVM बाइटकोड की व्याख्या करना शुरू करता है।एक अवधि के बाद, JVM तब समस्या के लिए कोड को ट्यून करने के लिए व्याख्या करते समय एकत्र किए गए आंकड़ों का उपयोग करते हुए देशी कोड में भारी उपयोग की गई विधियों को संकलित करने के लिए अपने जेआईटी कंपाइलर का उपयोग करता है।

वैसे, पाठ के इस भाग है कि आप उद्धृत अनाड़ी और तकनीकी रूप से गलत है:

जस्ट-इन-टाइम (JIT) संकलक रन-टाइम दुभाषिया की एक विशेषता है ... (context)

वास्तव में, जेआईटी दुभाषिया की विशेषता नहीं है। इसके बजाय, जेआईटी जेवीएम की कार्यक्षमता है कि दुभाषिया के साथ काम करता है।

0

जावा वर्चुअल मशीन (JVM) जावा प्रोग्राम चलाने के लिए संपूर्ण वातावरण प्रदान करता है। यह ऑपरेटिंग सिस्टम के साथ एकीकृत करता है, कक्षाओं को लोड करता है, और कार्यक्रम चलाता है। जस्ट-इन-टाइम कंपाइलर (जेआईटी) सिर्फ एक छोटा टुकड़ा है जिसे अक्षम किया जा सकता है (-Xint) लेकिन सक्षम होने पर, प्रदर्शन में उपयोगी सुधार प्रदान करता है। जेवीएम के कार्यान्वयन हुए हैं जिनमें एक जेआईटी शामिल नहीं है, और कार्यान्वयन जो जावा को कोड कोड से पूर्व-संकलित करके काम करता है, जैसे सी या सी ++ जैसे पारंपरिक भाषाओं के समान।

संबंधित मुद्दे