2010-08-09 17 views
11

के बीच अंतर मैंने लोगों को यह कहते हुए सुना है कि "एक जेवीएम आवश्यक रूप से जावा दुभाषिया है लेकिन जावा दुभाषिया आवश्यक रूप से एक JVM नहीं है"। क्या यह सच है?जावा दुभाषिया और जेवीएम

मेरा मतलब जावा दुभाषिया और जेवीएम के बीच कोई अंतर है?

उत्तर

15

हां, एक अंतर है।

जावा आभासी मशीन:

एक सॉफ्टवेयर "निष्पादन इंजन" कि सुरक्षित और अनुरूपता से एक माइक्रोप्रोसेसर पर जावा वर्ग फ़ाइलों में बाइट कोड निष्पादित करता है (एक कंप्यूटर में या किसी अन्य इलेक्ट्रॉनिक डिवाइस में है या नहीं)।

जावा दुभाषिया:

एक मॉड्यूल है कि बारी-बारी से डीकोड और कोड के कुछ शरीर के हर बयान निष्पादित करता है। जावा दुभाषिया जावा वर्चुअल मशीन के लिए बाइटकोड डीकोड करता है और निष्पादित करता है।

जावा दुभाषिया वास्तव में जेवीएम का हिस्सा है। वर्चुअल मशीन केवल बाइटकोड निष्पादित नहीं कर रही है, इसमें बहुत सारे कार्य हैं। उस पूर्ण पर्यावरण को JVM के रूप में जाना जाता है।

की जांच:

+0

"जावा दुभाषिया वास्तव में जेवीएम का हिस्सा है।" आपका मतलब जावा * बाइटकोड * दुभाषिया जेवीएम का एक हिस्सा है ... क्योंकि जेवीएम जावा कोड भी नहीं देखता है। – flow2k

+0

हालांकि, कि पूरी तरह से सही है या तो नहीं होगा, क्योंकि जैसे आपने कहा, JVM सिर्फ एक दुभाषिया की तुलना में अधिक है - यह अपने JIT कम्पाइलर के साथ अनुकूलन नहीं है जो अन्यथा प्रदर्शन empahsis साथ अनुप्रयोगों के लिए जावा अस्थिर होगा करता है। – flow2k

0

एक के लिए, किसी भी भाषा से (सैद्धांतिक रूप से) किसी भी भाषा को उस वातावरण में निष्पादन की अनुमति देने के लिए JVM बाइटकोड पर संकलित किया जा सकता है। जावा दुभाषिया केवल जावा कोड चलाने में सक्षम है।

+0

मुझे लगता है कि यह गलत है। जहां तक ​​मुझे पता है, जावा जावास्क्रिप्ट जावा के मुकाबले जावा के लिए बाध्य नहीं है। वास्तविक जावा-भाषा कोड परंपरागत रूप से संकलित किया जाता है, उसके बाद यह बाइट कोड होता है, जिसका अर्थ है और जेवीएम द्वारा/या अन्यथा निष्पादित किया जाता है। –

0

एक जेवीएम को जावा दुभाषिया को कॉल करना गलत है। जेवीएम एक जेआईटी कंपाइलर है जो बाइट-कोड संकलित करता है और चलाता है। अन्य भाषाओं को जेवीएम के लिए लक्षित बाइट-कोड में संकलित किया जा सकता है। Wikipedia article detailing such languages.

+1

यह सख्ती से सच नहीं है। JVM संकलित करने के लिए कौन से बिट्स का निर्णय लेने से पहले कुछ समय के लिए व्याख्या मोड में कोड चलाएगा। तो, हाँ, JVM एक जावा बाइटकोड (क्लास फ़ाइल) दुभाषिया है। – dty

+0

@ डैनी: कोई "जेवीएम" नहीं है। विभिन्न प्लेटफार्मों पर विभिन्न विक्रेताओं से कई जेवीएम कार्यान्वयन हैं जो सभी आवश्यक नहीं हैं। –

+1

अरे, मैं "जेवीएम" का उल्लेख करने वाला पहला व्यक्ति नहीं था! निर्भर करता है कि "वही काम" से आपका क्या मतलब है। वे सभी बाइटकोड निष्पादित करते हैं, और अंतर्निहित ओएस कार्यों जैसे थ्रेड, फाइल इत्यादि के लिए मैपिंग प्रदान करते हैं। उनमें से कुछ में जेआईटी नहीं है (जो मेरे तर्क में जोड़ देगा कि "जेवीएम एक जेआईटी कंपाइलर है" गलत है), कुछ उनमें से अलग थ्रेड मॉडल हैं (जेआरॉकिट का पुराना एम: एन मॉडल), कुछ में अलग-अलग जीसी एल्गोरिदम हैं, लेकिन वे सभी अनिवार्य रूप से वही काम करते हैं। लेकिन यह कहना सही नहीं है कि "जेवीएम एक जेआईटी कंपाइलर है"। – dty

0

मैं यह समझ के रूप में ...

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

जेवीएम बाइट कोड लेता है और मशीन कोड उत्पन्न करता है। बाइट कोड मशीन कोड में संकलित किया गया है, और मशीन कोड निष्पादित किया गया है।

+0

** ए ** जेवीएम जरूरी नहीं है कि एक जेआईटी कंपाइलर शामिल हो। उनमें से कुछ में एक जेआईटी कंपाइलर शामिल है, इसे अक्षम करने का विकल्प होता है। मेरा पर '-Xint'। – JeremyP

0

जावा आभासी मशीन एक आभासी प्रोसेसर है और एक जावा दुभाषिया जावा tool.thanks

+3

कुछ मूल्यवान जानकारी और संदर्भ शामिल करने के लिए अपना उत्तर संपादित करें। –

8

सीधे शब्दों में कहें, एक JVM बाईटकोड व्याख्या करती है और एक जावा दुभाषिया जावा की व्याख्या है। वे अलग हैं क्योंकि बाइटकोड और जावा अलग-अलग भाषाएं हैं।

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

जावा सी या पायथन जैसे उच्च स्तर की भाषा है। इन भाषाओं का भी व्याख्या किया जा सकता है: आप केवल एक प्रोग्राम लिखते हैं जो अपना कोड चला सकता है। इसमें बाइटकोड शामिल नहीं है। यह सिर्फ इतना है कि उच्च स्तरीय भाषाओं को सीधे व्याख्या करना कठिन होता है।

जावा प्रोग्राम को आमतौर पर जावा प्रोग्राम को बाइटकोड प्रोग्राम में अनुवाद करके "व्याख्या" किया जाता है। फिर जावा वर्चुअल मशीन (JVM) बाइटकोड चलाता है।

लेकिन आप इस तरह से किसी भी भाषा की व्याख्या कर सकते हैं। यदि आप उन्हें सही बाइटकोड में अनुवादित करते हैं तो JVM अन्य भाषाओं की व्याख्या कर सकता है।

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

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