2010-07-05 24 views

उत्तर

39

जावा संकलन समय पर एक मध्यवर्ती "बाइट कोड" में संकलित किया गया है। यह सी जैसी भाषा के विपरीत है जो संकलन समय पर मशीन भाषा में संकलित है। जावा बाइट कोड सीधे हार्डवेयर पर निष्पादित नहीं किया जा सकता है जिस तरह से सी कोड संकलित किया जा सकता है। इसके बजाए निष्पादित करने के लिए रनटाइम पर बाइट कोड को JVM (जावा वर्चुअल मशीन) द्वारा व्याख्या किया जाना चाहिए। सी जैसी भाषा की प्राथमिक कमी यह है कि जब इसे संकलित किया जाता है, तो वह बाइनरी फ़ाइल केवल एक विशेष आर्किटेक्चर (उदा। X86) पर काम करेगी।

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

जावा पूरी तरह से संकलित भाषा (बिना पोर्टेबिलिटी के) और एक पूरी तरह से व्याख्या की गई भाषा (जो काफी धीमी है) के बीच एक समझौता ढूंढना चाहता है। यह कोड को एक ऐसे रूप में संकलित करके पूरा करता है जो मशीन भाषा के करीब है (वास्तव में, जावा बाइट कोड एक मशीन भाषा है, बस जावा वर्चुअल मशीन के लिए), लेकिन अभी भी आर्किटेक्चर के बीच आसानी से पहुंचा जा सकता है। चूंकि जावा को अभी भी निष्पादन (JVM) के लिए एक सॉफ्टवेयर परत की आवश्यकता है, यह एक व्याख्या की गई भाषा है। हालांकि, दुभाषिया (जेवीएम) एक मध्यवर्ती रूप पर काम करता है जिसे कच्चे स्रोत फ़ाइलों के बजाए बाइट कोड के नाम से जाना जाता है। यह बाइट कोड जावा कंपाइलर द्वारा संकलित समय पर उत्पन्न होता है। इसलिए, जावा भी एक संकलित भाषा है। इस तरह से परिचालन करके, जावा संकलित भाषाओं के कुछ लाभ प्राप्त करता है, जबकि व्याख्या की गई भाषाओं के कुछ लाभ भी प्राप्त करते हैं। हालांकि, यह इन दोनों भाषाओं से कुछ सीमाएं भी प्राप्त करता है।

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

+0

elobrate कृपया "PHP जैसी व्याख्या की गई भाषाएं पूरी तरह से स्वतंत्र हैं" - पूरी तरह से सत्य नहीं: ['पाउ (2,36) '] (http://www.php.net/manual/en/function.pow.php) 32-बिट सिस्टम पर' 6.87194767360e + 10' और 64-बिट सिस्टम पर '68719476736' देगा। – amphetamachine

+0

एक मामूली नाइटपिक - लेकिन बाइट कोड मशीन भाषा है। एक भौतिक मशीन होने से आपको रोक नहीं है जो JVM विनिर्देशों को लागू करता है।उस स्थिति में, बाइट कोड सीधे हार्डवेयर पर निष्पादित किया जाएगा और सॉफ़्टवेयर परत या व्याख्या की आवश्यकता नहीं होगी। – emory

+1

@amphetamachine पर्याप्त मेला, कैसे "प्रभावी" के बारे में? –

6

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

+0

सरल में जेआईटी क्या है? – JavaUser

+4

@JavaUser इसे धीरे-धीरे पढ़ने में लगभग 10 मिनट लगते हैं .. – ant

1

संकलित: प्रोग्राम शुरू होने से पहले आपका प्रोग्राम सिंटैक्टिक रूप से एक सही जावा प्रोग्राम है।

व्याख्या की गई: अलग-अलग प्लेटफ़ॉर्म पर समान (बाइट-) कोड चलाएं।

संकलित: जब आपका प्रोग्राम सही ढंग से संकलित हो गया है तो आप 80% सॉफ़्टवेयर बग को नियंत्रण में रखने के लिए शर्मिंदा हो सकते हैं। और आपका कोड रुक जाएगा क्योंकि आपने कोड ब्लॉक को सही ढंग से बंद नहीं किया है, आदि

व्याख्या: आप जानते हैं कि ऐप्पल क्या हैं? जब जावा बाहर आया तो यह "हत्यारा" एप्लिकेशन था। आपका ब्राउज़र वेबसाइट से एप्लेट डाउनलोड करता है और आपके ब्राउज़र में एप्लेट कोड चलाता है। यह बहुत अच्छा नहीं है। लेकिन, एक ही एप्लेट विंडोज, लिनक्स, मैक, सोलारिस, पर चलता है ... क्योंकि एक इंटरमीडिया भाषा चलाता/व्याख्या करता है: बाइट कोड।

+2

उत्तर बहुत सार है। क्या आप – JavaUser

2

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

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

2

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

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

इस तथ्य की एक सैद्धांतिक नकारात्मकता कि स्रोत प्रोग्राम की अनुपस्थिति में किसी भी सिस्टम पर जावा प्रोग्राम चलाया जा सकता है, जबकि यह विधि वितरण क्रॉस-प्लेटफार्म संगतता सुनिश्चित करता है, डेवलपर्स के पास "स्रोत-प्लेटफ़ॉर्म" और "ओपन सोर्स" वाक्यांशों के वैचारिक अर्थों के बीच एक वेज चलाते हुए, उनके स्रोत कोड को रिलीज़ करने का एक कम कारण होता है।

11

हम क्यों कहते हैं कि जावा संकलित और भाषा का अर्थ है।

क्योंकि स्रोत कोड (.java फ़ाइलें) है बाईटकोड (.class फ़ाइलें) है कि तब निष्पादन के लिए एक Java Virtual Machine (यह भी एक JVM के रूप में जाना जाता है) द्वारा व्याख्या में संकलित (JVM आगे अनुकूलन कर सकते हैं, लेकिन यह अनोखी कहानी है)।

क्या इस पर लाभ है (संकलित किया जा रहा/व्याख्या)

पोर्टेबिलिटी। वही बाइटकोड किसी भी प्लेटफॉर्म पर तब तक निष्पादित किया जा सकता है जब तक कि एक JVM स्थापित हो ("एक बार संकलित करें, कहीं भी चलाएं")।

1

जावा एक पूर्ण ऑब्जेक्ट उन्मुख प्रोग्रामिंग भाषा है। यह मंच स्वतंत्र है और आमतौर पर सी/सी ++ जैसे संकलित के बजाय व्याख्या की जाती है। जावा एक स्वतंत्र बाइटकोड का उपयोग करता है जो आर्किटेक्चर तटस्थ है। यही है, यह मशीन स्वतंत्र होने के लिए डिज़ाइन किया गया है। बाइट कोड जावा वर्चुअल मशीन (जेवीएम) द्वारा व्याख्या और निष्पादित किया जाता है।