JVM - जावा वर्चुअल मशीन क्या है & इसकी वास्तुकला

विषय - सूची:

Anonim

जेवीएम क्या है

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

यहाँ जेवीएम कैसे काम करता है

सबसे पहले, Java कोड को bytecode में संकलित किया जाता है। इस बाइटकोड को विभिन्न मशीनों पर व्याख्या की जाती है

मेजबान प्रणाली और जावा स्रोत के बीच, बायटेकोड एक मध्यस्थ भाषा है।

जावा में JVM मेमोरी स्पेस आवंटित करने के लिए जिम्मेदार है।

जावा वर्चुअल मशीन (JVM) का कार्य करना

इस JVM ट्यूटोरियल में, आप सीखेंगे-

  • जेवीएम आर्किटेक्चर
  • सॉफ्टवेयर कोड संकलन और निष्पादन प्रक्रिया
  • सी कोड संकलन और निष्पादन प्रक्रिया
  • जावा कोड संकलन और निष्पादन प्रक्रिया
  • जावा की व्याख्या और संकलित भाषा दोनों क्यों है?
  • जावा धीमा क्यों है?

जेवीएम आर्किटेक्चर

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

1) क्लासलॉडर

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

2) विधि क्षेत्र

जेवीएम विधि क्षेत्र मेटाडेटा, निरंतर रनटाइम पूल और विधियों के लिए कोड जैसे वर्ग संरचनाओं को संग्रहीत करता है।

३) ढेर

सभी ऑब्जेक्ट्स, उनके संबंधित इंस्टेंस चर, और सरणियाँ ढेर में संग्रहीत हैं। यह मेमोरी सामान्य है और कई थ्रेड्स में साझा की जाती है।

4) JVM भाषा ढेर

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

5) पीसी रजिस्टर

पीसी रजिस्टर जावा वर्चुअल मशीन अनुदेश का पता संग्रहीत करता है जो वर्तमान में निष्पादित हो रहा है। जावा में, प्रत्येक थ्रेड का अपना अलग पीसी रजिस्टर होता है।

6) मूल विधि ढेर

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

7) निष्पादन इंजन

यह एक प्रकार का सॉफ्टवेयर है, जिसका उपयोग हार्डवेयर, सॉफ्टवेयर या संपूर्ण प्रणालियों के परीक्षण के लिए किया जाता है। परीक्षण निष्पादन इंजन कभी भी परीक्षण किए गए उत्पाद के बारे में कोई जानकारी नहीं देता है।

8) मूल विधि इंटरफ़ेस

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

9) मूल विधि पुस्तकालय

नेटिव लाइब्रेरीज़ नेटिव लाइब्रेरीज़ (C, C ++) का एक संग्रह है, जो एक्ज़ीक्यूशन इंजन द्वारा आवश्यक हैं।

सॉफ्टवेयर कोड संकलन और निष्पादन प्रक्रिया

सॉफ़्टवेयर प्रोग्राम लिखने और निष्पादित करने के लिए, आपको निम्न की आवश्यकता है

1) संपादक - अपने कार्यक्रम को टाइप करने के लिए, इसके लिए एक नोटपैड का उपयोग किया जा सकता है

2) कम्पाइलर - अपने उच्च भाषा प्रोग्राम को देशी मशीन कोड में परिवर्तित करने के लिए

3) लिंकर - अपने मुख्य कार्यक्रम में विभिन्न प्रोग्राम फाइलों के संदर्भ को एक साथ मिलाने के लिए।

4) लोडर - निष्पादन के लिए रैम में हार्ड डिस्क, फ्लैश ड्राइव, सीडी जैसे अपने द्वितीयक संग्रहण डिवाइस से फ़ाइलों को लोड करने के लिए। जब आप अपना कोड निष्पादित करते हैं तो लोडिंग स्वचालित रूप से हो जाती है।

5) निष्पादन - कोड का वास्तविक निष्पादन जो आपके ओएस और प्रोसेसर द्वारा नियंत्रित किया जाता है।

इस पृष्ठभूमि के साथ, निम्न वीडियो देखें और JVM की आंतरिक कार्य और वास्तुकला JVM (जावा वर्चुअल मशीन) सीखें।

यदि वीडियो उपलब्ध नहीं है तो यहां क्लिक करें

सी कोड संकलन और निष्पादन प्रक्रिया

जावा में जावा संकलन प्रक्रिया को समझने के लिए। चलो पहले सी में प्रक्रिया को संकलित करने और लिंक करने के लिए एक त्वरित नज़र डालें।

मान लीजिए, मुख्य में, आपने दो फ़ंक्शन को f1 और f2 कहा है। मुख्य फ़ंक्शन a1.c फ़ाइल में संग्रहीत है।

फ़ंक्शन एफ 1 को a2.c फ़ाइल में संग्रहीत किया जाता है

फ़ंक्शन a2 को a3.c फ़ाइल में संग्रहीत किया जाता है

इन सभी फ़ाइलों, अर्थात, a1.c, a2.c और a3.c, को संकलक को खिलाया जाता है। जिसका आउटपुट मशीन कोड हैं, जो संबंधित ऑब्जेक्ट फाइल्स हैं।

अगला चरण लिंकर की मदद से इन सभी ऑब्जेक्ट फ़ाइलों को एक .exe फ़ाइल में एकीकृत कर रहा है। लिंकर इन सभी फाइलों को एक साथ क्लब करेगा और .exe फ़ाइल का उत्पादन करेगा।

प्रोग्राम रन के दौरान, एक लोडर प्रोग्राम निष्पादन के लिए a.exe को RAM में लोड करेगा।

जावा कोड संकलन और जावा वीएम में निष्पादन

अब इस JVM ट्यूटोरियल में, JAVA के लिए प्रक्रिया देखें। आपके मुख्य में, आपके पास दो विधियाँ f1 और f2 हैं।

  • A1.java फ़ाइल में मुख्य विधि संग्रहीत है
  • f1 को a2.java के रूप में एक फ़ाइल में संग्रहीत किया जाता है
  • f2 को a3.java के रूप में एक फ़ाइल में संग्रहीत किया जाता है

कंपाइलर तीन फ़ाइलों को संकलित करेगा और 3 संबंधित .class फ़ाइल का निर्माण करेगा जिसमें BYTE कोड शामिल है। सी के विपरीत, कोई लिंकिंग नहीं की जाती है

जावा वीएम या जावा वर्चुअल मशीन रैम पर रहती है। निष्पादन के दौरान, क्लास लोडर का उपयोग करके रैम पर क्लास की फाइलें लाई जाती हैं। BYTE कोड किसी भी सुरक्षा उल्लंघनों के लिए सत्यापित है।

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

नोट: JIT या जस्ट-इन-टाइम कंपाइलर जावा वर्चुअल मशीन (JVM) का हिस्सा है। यह बाइट कोड के उस भाग की व्याख्या करता है जिसमें एक ही समय में समान कार्यक्षमता होती है।

जावा को व्याख्या और संकलित भाषा दोनों क्यों है?

प्रोग्रामिंग भाषाओं को वर्गीकृत किया जाता है
  • उच्च स्तरीय भाषा पूर्व। सी ++, जावा
  • मध्य स्तर की भाषाएँ पूर्व। सी
  • निम्न-स्तरीय भाषा पूर्व विधानसभा
  • अंत में मशीन भाषा के रूप में निम्नतम स्तर।

एक कंपाइलर एक प्रोग्राम है जो एक प्रोग्राम को भाषा के एक स्तर से दूसरे स्तर पर परिवर्तित करता है। मशीन कोड में C ++ प्रोग्राम का उदाहरण रूपांतरण।

जावा कंपाइलर उच्च-स्तरीय जावा कोड को बाइटकोड (जो एक प्रकार का मशीन कोड भी है) में परिवर्तित करता है।

एक दुभाषिया एक ऐसा कार्यक्रम है जो एक कार्यक्रम को एक स्तर पर दूसरी प्रोग्रामिंग भाषा में समान स्तर पर परिवर्तित करता है। C ++ में जावा प्रोग्राम का उदाहरण रूपांतरण

जावा में, जस्ट इन टाइम कोड जनरेटर बाईटेकोड को मूल मशीन कोड में परिवर्तित करता है जो समान प्रोग्रामिंग स्तरों पर हैं।

इसलिए, जावा को संकलित भाषा के रूप में भी संकलित किया गया है।

जावा धीमा क्यों है?

जावा की सुस्ती के पीछे दो मुख्य कारण हैं

  1. डायनेमिक लिंकिंग: सी के विपरीत, लिंकिंग रन-टाइम पर किया जाता है, हर बार प्रोग्राम जावा में चलाया जाता है।
  2. रन-टाइम दुभाषिया: बाइट कोड को देशी मशीन कोड में बदलने का कार्य रन-टाइम पर जावा में किया जाता है, जो फुर्सत से गति को धीमा कर देता है

हालांकि, जावा के नवीनतम संस्करण ने प्रदर्शन की बाधाओं को काफी हद तक संबोधित किया है।

सारांश :

  • JVM का फुल फॉर्म Java Virtual Machine है। जावा में जेवीएम वह इंजन है जो जावा कोड को चलाता है। यह जावा बाइटकोड को मशीनों की भाषा में परिवर्तित करता है।
  • जावा में JVM आर्किटेक्चर में क्लास लोडर, मेमोरी एरिया, एक्ज़ीक्यूशन इंजन आदि होते हैं।
  • JVM में, Java कोड को bytecode से संकलित किया जाता है। इस बाइटकोड को विभिन्न मशीनों पर व्याख्या की जाती है
  • JIT का मतलब सिर्फ इन-टाइम कंपाइलर है। JIT जावा वर्चुअल मशीन (JVM) का हिस्सा है। इसका उपयोग निष्पादन समय को गति देने के लिए किया जाता है
  • अन्य संकलक मशीनों की तुलना में, जावा में जेवीएम निष्पादन में धीमा हो सकता है।