JVM क्या है? JVM की व्याख्या करें। Archiटेक्चर
⚡ स्मार्ट सारांश
Java वर्चुअल मशीन (जेवीएम) वह इंजन है जो रनटाइम वातावरण प्रदान करता है और मशीनों को संचालित करता है। Java यह कोड प्लेटफ़ॉर्म-स्वतंत्र बाइटकोड को मूल मशीन भाषा में परिवर्तित करता है। यह इसका एक हिस्सा है। Java रनटाइम वातावरण और सक्षम बनाता है Javaइसकी एक बार लिखने और कहीं भी चलाने की पोर्टेबिलिटी है।

JVM क्या है? Java?
Java वर्चुअल मशीन (JVM) एक इंजन है जो चलाने के लिए रनटाइम वातावरण प्रदान करता है Java कोड या एप्लिकेशन। यह परिवर्तित करता है Java बाइटकोड को मशीन भाषा में बदलना। JVM इसका एक हिस्सा है Java रनटाइम एनवायरनमेंट (JRE)। अन्य प्रोग्रामिंग भाषाओं में, कंपाइलर किसी विशेष सिस्टम के लिए मशीन कोड तैयार करता है। हालाँकि, Java कंपाइलर वर्चुअल मशीन के लिए कोड तैयार करता है जिसे वर्चुअल मशीन के नाम से जाना जाता है। Java आभासी मशीन।
जेवीएम कैसे काम करता है?
सबसे पहले, Java कोड को बाइटकोड में संकलित किया जाता है। इस बाइटकोड को अलग-अलग मशीनों पर व्याख्यायित किया जाता है। होस्ट सिस्टम और के बीच Java स्रोत में, बाइटकोड एक मध्यवर्ती भाषा है। जेवीएम में Java मेमोरी स्पेस आवंटित करने के लिए जिम्मेदार है.
का काम करना Java वर्चुअल मशीन (JVM)
Archiजेवीएम की तकनीक (Java वर्चुअल मशीन)
अब आइए, JVM की संरचना को समझते हैं। JVM की संरचना में Java इसमें क्लासलोडर, मेमोरी एरिया, एक्जीक्यूशन इंजन और अन्य चीजें शामिल हैं।
Java आभासी मशीन Archiटेक्चर
1) क्लास लोडर
क्लास लोडर एक उपप्रणाली है जिसका उपयोग क्लास फ़ाइलों को लोड करने के लिए किया जाता है। यह तीन प्रमुख कार्य करता है, अर्थात् लोडिंग, लिंकिंग और आरंभीकरण।
2) विधि क्षेत्र
JVM मेथड एरिया में मेटाडेटा, कॉन्स्टेंट रनटाइम पूल और मेथड के लिए कोड जैसी क्लास संरचनाएं संग्रहीत होती हैं।
3) ढेर
सब वस्तुएँ, उनके संबंधित इंस्टेंस वैरिएबल और एरे को हीप में संग्रहीत किया जाता है। यह मेमोरी सामान्य है और कई थ्रेड्स में साझा की जाती है।
4) जेवीएम भाषा स्टैक
Java लैंग्वेज स्टैक स्थानीय वेरिएबल्स और उनके आंशिक परिणामों को स्टोर करते हैं। प्रत्येक थ्रेड का अपना JVM स्टैक होता है, जो थ्रेड के निर्माण के साथ ही बनता है। जब भी कोई मेथड कॉल किया जाता है, एक नया फ्रेम बनता है, और मेथड कॉल की प्रक्रिया पूरी होने पर उसे डिलीट कर दिया जाता है।
5) पीसी रजिस्टर
पीसी रजिस्टर पते को संग्रहीत करता है Java वर्तमान में निष्पादित हो रहे वर्चुअल मशीन निर्देश। Javaप्रत्येक थ्रेड का अपना अलग पीसी रजिस्टर होता है।
6) मूल विधि स्टैक
नेटिव मेथड स्टैक में नेटिव कोड के वे निर्देश होते हैं जो नेटिव लाइब्रेरी पर निर्भर करते हैं। इसे किसी अन्य भाषा में लिखा जाता है। Java.
7) निष्पादन इंजन
एक्जीक्यूशन इंजन बाइटकोड को पढ़ता है और उसे टुकड़ों में निष्पादित करता है। यह बाइटकोड को नेटिव मशीन कोड में परिवर्तित करने और उसे चलाने के लिए एक इंटरप्रेटर और जस्ट-इन-टाइम (JIT) कंपाइलर का उपयोग करता है।
8) नेटिव मेथड इंटरफ़ेस
नेटिव मेथड इंटरफ़ेस एक प्रोग्रामिंग फ्रेमवर्क है। यह अनुमति देता है Java जेवीएम में चलने वाला कोड, नेटिव एप्लिकेशन और लाइब्रेरी को कॉल करने और उनसे कॉल प्राप्त करने के लिए होता है।
9) मूल विधि लाइब्रेरी
नेटिव लाइब्रेरीज मूल निवासियों के पुस्तकालयों का एक संग्रह है (सी, C++) जो निष्पादन इंजन के लिए आवश्यक हैं।
सॉफ्टवेयर Code संकलन एवं निष्पादन प्रक्रिया
किसी सॉफ्टवेयर प्रोग्राम को लिखने और चलाने के लिए आपको निम्नलिखित चीजों की आवश्यकता होती है:
- 1)संपादक – अपना प्रोग्राम टाइप करने के लिए; इसके लिए नोटपैड का उपयोग किया जा सकता है।
- 2) संकलक – आपके हाई-लेवल लैंग्वेज प्रोग्राम को नेटिव मशीन कोड में परिवर्तित करने के लिए।
- 3) लिंकर – अपने मुख्य प्रोग्राम में विभिन्न प्रोग्राम फ़ाइल संदर्भों को एक साथ संयोजित करने के लिए।
- 4) लोडर – हार्ड डिस्क, फ्लैश ड्राइव या सीडी जैसे आपके सेकेंडरी स्टोरेज डिवाइस से फाइलों को रैम में लोड करके उन्हें निष्पादित करना। कोड निष्पादित करते समय लोडिंग स्वचालित रूप से हो जाती है।
- 5) निष्पादन – कोड का वास्तविक निष्पादन, जिसे आपके ऑपरेटिंग सिस्टम और प्रोसेसर द्वारा नियंत्रित किया जाता है।
इस पृष्ठभूमि के साथ, निम्नलिखित वीडियो देखें और JVM की आंतरिक कार्यप्रणाली और वास्तुकला के बारे में जानें (Java वर्चुअल मशीन).
क्लिक करें यहाँ उत्पन्न करें यदि वीडियो उपलब्ध न हो
सी कोड संकलन और निष्पादन प्रक्रिया
समझने के लिए Java संकलन प्रक्रिया: आइए सबसे पहले C में संकलन और लिंकिंग प्रक्रिया पर एक संक्षिप्त नज़र डालें।
मान लीजिए कि मुख्य फ़ंक्शन में आपने दो फ़ंक्शन, f1 और f2 को कॉल किया है। मुख्य फ़ंक्शन a1.c फ़ाइल में संग्रहीत है।
फंक्शन f1 को a2.c नामक फाइल में संग्रहित किया गया है।
फंक्शन f2 को a3.c नामक फाइल में संग्रहित किया गया है।
ये सभी फाइलें, यानी a1.c, a2.c और a3.c, कंपाइलर को दी जाती हैं, जिसका आउटपुट संबंधित ऑब्जेक्ट फाइलें होती हैं, जो मशीन कोड होती हैं।
अगला चरण लिंकर की सहायता से इन सभी ऑब्जेक्ट फ़ाइलों को एक ही .exe फ़ाइल में एकीकृत करना है। लिंकर इन सभी फ़ाइलों को एक साथ जोड़कर .exe फ़ाइल तैयार करेगा।
प्रोग्राम चलने के दौरान, एक लोडर प्रोग्राम a.exe फ़ाइल को लोड करेगा। रैम निष्पादन के लिए।
Java कोड संकलन और निष्पादन Java VM
अब आइए प्रक्रिया पर एक नज़र डालते हैं। Javaआपके मेन कोड में दो मेथड हैं, f1 और f2।
- मुख्य विधि a1.java फ़ाइल में संग्रहीत है।
- f1 को a2.java नामक फ़ाइल में संग्रहीत किया जाता है
- f2 को a3.java नामक फ़ाइल में संग्रहीत किया जाता है
कंपाइलर तीनों फाइलों को कंपाइल करेगा और उनसे संबंधित तीन .class फाइलें तैयार करेगा, जिनमें बाइट कोड होगा। C के विपरीत, इसमें कोई लिंकिंग नहीं की जाती है।
RSI Java वीएम, सोना Java वर्चुअल मशीन रैम में रहती है। निष्पादन के दौरान, क्लास लोडर का उपयोग करके, क्लास फ़ाइलों को रैम में लाया जाता है। बाइट कोड की सुरक्षा संबंधी किसी भी खामी के लिए जाँच की जाती है।
इसके बाद, निष्पादन इंजन बाइटकोड को नेटिव मशीन कोड में परिवर्तित करेगा। इसे जस्ट-इन-टाइम कंपाइलिंग कहते हैं। यह उन मुख्य कारणों में से एक है जिनकी वजह से ऐसा संभव हो पाता है। Java तुलनात्मक रूप से धीमी है.
नोट: JIT, या जस्ट-इन-टाइम कंपाइलर, का वह हिस्सा है Java वर्चुअल मशीन (जेवीएम)। यह बाइट कोड के उन हिस्सों की व्याख्या करती है जिनमें एक ही समय में समान कार्यक्षमता होती है।
क्यों है Java क्या यह भाषा व्याख्यायित और संकलित दोनों है?
प्रोग्रामिंग की भाषाएँ इन्हें इस प्रकार वर्गीकृत किया गया है:
- उच्च स्तरीय भाषा, उदाहरण के लिए, C++, Java
- मध्य-स्तरीय भाषाएँ, जैसे कि C
- निम्न-स्तरीय भाषा, उदाहरण के लिए, Assembly
- अंत में, सबसे निचला स्तर मशीन भाषा के रूप में है।
A संकलक यह एक ऐसा प्रोग्राम है जो किसी प्रोग्राम को एक भाषा स्तर से दूसरे भाषा स्तर में परिवर्तित करता है। उदाहरण के लिए, एक प्रोग्राम का रूपांतरण। C++ प्रोग्राम को मशीन कोड में परिवर्तित करना। Java कंपाइलर उच्च-स्तरीय को परिवर्तित करता है Java कोड को बाइटकोड में परिवर्तित करना (जो कि मशीन कोड का एक प्रकार भी है)।
An दुभाषिया यह एक ऐसा प्रोग्राम है जो एक स्तर के प्रोग्राम को दूसरे स्तर की प्रोग्रामिंग भाषा में परिवर्तित करता है। वही स्तरउदाहरण के लिए, किसी चीज़ का रूपांतरण। Java कार्यक्रम में C++.
In Javaजस्ट-इन-टाइम कोड जनरेटर बाइटकोड को नेटिव मशीन कोड में परिवर्तित करता है, जो समान प्रोग्रामिंग स्तर पर होते हैं। अतः, Java यह एक संकलित भाषा होने के साथ-साथ एक व्याख्यात्मक भाषा भी है।
क्यों है Java धीमा?
धीमी गति के पीछे दो मुख्य कारण हैं Java यह है:
- गतिशील लिंकिंग: सी के विपरीत, लिंकिंग रन-टाइम पर की जाती है, हर बार जब प्रोग्राम चलाया जाता है Java.
- रन-टाइम इंटरप्रेटर: बाइट कोड का मूल मशीन कोड में रूपांतरण रन-टाइम पर किया जाता है Javaजिससे गति और भी धीमी हो जाती है।
हालाँकि, नवीनतम संस्करणों में Java हमने प्रदर्शन संबंधी इन बाधाओं को काफी हद तक दूर कर लिया है।











