असल में, वी 8 सी ++ में लिखा गया है। हालांकि, मूल रूप से JVM के समान ही काम करता है, और JVM सी वी 8 जेआईटी जावास्क्रिप्ट कोड में लिखा गया है और JIT'd कोड निष्पादित करता है। इसी प्रकार जेवीएम जेआईटी संकलित (या हॉटस्पॉट संकलित) बाइटकोड (जावा नहीं) और जेनरेट कोड को निष्पादित करता है।
बाइटकोड स्थिर नहीं है, क्योंकि जावा है। वास्तव में यह काफी गतिशील हो सकता है। दूसरी तरफ, जावा ज्यादातर स्थिर है, और जावा को बाइटकोड से भरना सही नहीं है। जावा कंपाइलर जावा स्रोत कोड को बाइटकोड में बदल देता है, और JVM बाइटकोड निष्पादित करता है। अधिक जानकारी के लिए, मैं आपको जॉन रोज़ ब्लॉग (example) देखने की सलाह देता हूं। वहाँ बहुत अच्छी जानकारी है। इसके अलावा, क्लिफ क्लिक (जैसे) द्वारा वार्ता की तलाश करने का प्रयास करें।
इसी तरह, क्लोजर कोड सीधे बाइटकोड में संकलित किया जाता है, और JVM तब उसी बाइटकोड के साथ एक ही प्रक्रिया करता है। संकलन क्लोजर आमतौर पर रनटाइम पर किया जाता है, जो सबसे तेज़ प्रक्रिया नहीं है। इसी प्रकार जावास्क्रिप्ट में क्लोजरस्क्रिप्ट का अनुवाद या तो तेज़ नहीं है। निष्पादन योग्य रूप में जावास्क्रिप्ट का वी 8 का अनुवाद स्पष्ट रूप से काफी तेज़ है। हालांकि क्लोजर बाइटकोड में संकलित समय से आगे हो सकता है, और यह स्टार्टअप ओवरहेड को खत्म कर सकता है।
जैसा कि आपने कहा था, यह भी कहना सही नहीं है कि JVM बाइटकोड का अर्थ है। 1.0 रिलीज ने 17 साल पहले किया था!
परंपरागत रूप से, दो संकलन मोड थे। पहला मोड एक जेआईटी (जस्ट इन टाइम) कंपाइलर है। जहां बाइटकोड का सीधे मशीन कोड में अनुवाद किया जाता है।जावा की जेआईटी संकलन तेजी से निष्पादित करता है, और यह अत्यधिक अनुकूलित कोड उत्पन्न नहीं करता है। यह ठीक चलाता है।
दूसरे मोड को हॉटस्पॉट कंपाइलर कहा जाता है। हॉटस्पॉट कंपाइलर बहुत परिष्कृत है। यह प्रोग्राम को व्याख्या मोड में बहुत जल्दी शुरू करता है, और यह प्रोग्राम चलाता है क्योंकि यह इसका विश्लेषण करता है। चूंकि यह हॉटस्पॉट (अक्सर कोड निष्पादित कोड में स्पॉट) का पता लगाता है, यह उनको संकलित करेगा। जबकि जेआईटी कंपाइलर को तेज़ी से चलना पड़ता है क्योंकि कुछ भी निष्पादित नहीं होता है जब तक कि यह जेआईटीड नहीं होता है, हॉटस्पॉट कंपाइलर कोड को संकलित करने वाले कोड से बाहर स्नैप अनुकूलित करने के लिए अतिरिक्त समय बिताने के लिए खर्च कर सकता है।
इसके अतिरिक्त, यह वापस जा सकता है और बाद में उस कोड पर फिर से जा सकता है और यदि आवश्यक हो तो इसे और अधिक अनुकूलन लागू कर सकता है। यह वह बिंदु है जहां हॉटस्पॉट कंपाइलर संकलित सी/सी ++ को हरा करना शुरू कर सकता है। चूंकि इसमें कोड का रनटाइम ज्ञान है, इसलिए यह अनुकूलन लागू कर सकता है कि एक स्थिर सी/सी ++ कंपाइलर नहीं कर सकता है। उदाहरण के लिए, यह आभासी कार्यों को रेखांकित कर सकता है।
हॉटस्पॉट में एक अन्य विशेषता है, जो कि मेरे ज्ञान के किसी भी अन्य पर्यावरण के लिए नहीं है, यह आवश्यक होने पर कोड को भी हटा सकता है। उदाहरण के लिए, यदि कोड लगातार एक शाखा ले रहा था, और इसे अनुकूलित किया गया था और रनटाइम की स्थिति कोड को अन्य (अप्रचलित) शाखा के नीचे मजबूर कर रही है और प्रदर्शन अचानक भयानक हो जाता है। हॉटस्पॉट उस फ़ंक्शन को डिप्टीमाइज़ कर सकता है और इसे फिर से चलाने के तरीके को समझने के लिए विश्लेषण शुरू कर सकता है।
हॉटस्पॉट का एक नकारात्मक पक्ष यह है कि यह थोड़ा धीमा शुरू होता है। जावा 7 जेवीएम में एक बदलाव जेआईटी कंपाइलर और हॉटस्पॉट कंपाइलर को गठबंधन करना है। यह मोड नया है, हालांकि, और यह डिफ़ॉल्ट नहीं है, लेकिन एक बार प्रारंभिक स्टार्टअप अच्छा होना चाहिए और फिर यह advanced optimizations शुरू कर सकता है कि JVM बहुत अच्छा है।
चीयर्स!
"जावा सी से धीमा है" कई समस्या डोमेन के लिए सच हो सकता है, लेकिन यह अप्रासंगिक है। उचित सवाल यह है कि "क्या जावा वी 8 से धीमा है"। V8 आपके कोड को संकलित सी कोड के रूप में नहीं चलाता है, यह एक जावास्क्रिप्ट दुभाषिया है जो सी –
@EricJ में लिखा जाता है। मुझे लगता है कि यह मेरा सवाल है, तो मैं क्लोजर-जेनरेटेड जावास्क्रिप्ट बनाम वी 8 को क्लोजर का अर्थ बताता हूं। वी 8 संकलित करता है कि जेएस नीचे मशीन कोड और इसे चलाता है। जेवीएम क्या तेज़ करता है? – lobsterism
क्लोजर जावा की तरह बाइट कोड में संकलित किया गया है। आपको क्या लगता है कि यह नहीं था? –