2012-01-19 15 views
5

यह मेरी समझ है कि जावा कंपाइलर "बाइट कोड" उत्पन्न करता है, न कि "ऑब्जेक्ट कोड"। सबसे पहले, क्या यह सही है?क्या जावा ऑब्जेक्ट कोड या बाइट कोड उत्पन्न करता है?

इसके अलावा, यह मेरी पुस्तक कहता है, मैं सोच रहा था कि यह सही क्यों है। बाइट कोड और ऑब्जेक्ट कोड के बीच क्या अंतर है?

+5

जावा बाइट कोड को स्रोत कोड संकलित देखें। मैंने अभी तक "ऑब्जेक्ट कोड" के बारे में कभी नहीं सुना है। –

+1

आपके एक प्रोफेसर द्वारा एक पुस्तक? :) क्या यह अंग्रेजी में लिखा गया था? – milan

उत्तर

15

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

+0

तो ऑब्जेक्ट कोड मूल कोड है? – Bhaxy

+5

@ बैक्सी: नहीं, मैंने यह नहीं कहा। [विकिपीडिया] (http://en.wikipedia.org/wiki/Object_code) इसे "कंप्यूटर कंपाइलर क्या बनाता है" के रूप में वर्णित करता है। यह कुछ हद तक अस्पष्ट शब्द है, लेकिन मैं कहूंगा कि यह आमतौर पर "एक कार्यक्रम का एक गैर-पाठपरक प्रतिनिधित्व, मनुष्यों की बजाय मशीनों को लक्षित करना" है। आपके द्वारा चल रहे कंप्यूटर के मूल आर्किटेक्चर की बजाय "मशीन" JVM है। –

+0

@ बैक्सी हाँ आप इसे मिला :) – reversiblean

2

जब आप जावा प्रोग्राम संकलित करते हैं, तो यह बाइट-कोड पर जाता है। जब आप परिणामस्वरूप आर्टिफैक्ट चलाते हैं, तो प्लेटफ़ॉर्म का JVM तब बाइटकोड चलाता है (इसे ठीक से, व्याख्या करता है), इसे मशीन स्तर के निर्देशों में बदल देता है।

0

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

0

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

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

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

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

लघु संस्करण:

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

यह 100% सटीक नहीं हो सकता है क्योंकि मैं अभी भी यह सामान सीखना शुरू कर रहा हूं।लेकिन यह अब तक इस अवधारणा की मेरी समझ है। आशा है कि ये आपकी मदद करेगा।

1

सी ऑब्जेक्ट कोड एक रूप में है जो केवल ओएस जिस पर संकलित किया गया था, व्याख्या कर सकता है।

सी कोड - (। उदाहरण के लिए: जीसीसी)> सी संकलक -> ऑब्जेक्ट कोड -> ओएस

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

जावा code-> जावा (javac) -> बाइट कोड -> JVM

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

इसके अलावा difference between object code and byte code

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