JVM क्या है? JVM की व्याख्या करें। Archiटेक्चर

⚡ स्मार्ट सारांश

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

  • 🧩 बाइटकोड ब्रिज: RSI Java कंपाइलर मशीन कोड के बजाय बाइटकोड उत्पन्न करता है, और जेवीएम किसी भी होस्ट सिस्टम पर उस बाइटकोड की व्याख्या करता है।
  • 🏗️ मूल Archiटेक्चर: JVM प्रोग्राम चलाने के लिए क्लास लोडर, मेथड एरिया, हीप, स्टैक, पीसी रजिस्टर और एक एग्जीक्यूशन इंजन को संयोजित करता है।
  • 🔄 संकलन प्रवाह: सी के विपरीत, Java इसमें लिंकिंग की आवश्यकता नहीं होती; क्लास फाइलों को रैम में लोड किया जाता है, सत्यापित किया जाता है और फिर रनटाइम पर निष्पादित किया जाता है।
  • जेआईटी कंपाइलर: जस्ट-इन-टाइम कंपाइलर निष्पादन के दौरान बाइटकोड को नेटिव मशीन कोड में परिवर्तित करता है ताकि प्रदर्शन में सुधार हो सके।
  • 🐢 प्रदर्शन नोट: डायनामिक लिंकिंग और रनटाइम इंटरप्रिटेशन ऐतिहासिक रूप से Java पहले ये धीमे थे, हालांकि आधुनिक संस्करण काफी हद तक इस अंतर को कम कर देते हैं।

JVM Archiटेक्चर

JVM क्या है? Java?

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

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

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

का काम करना Java वर्चुअल मशीन जेवीएम

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

Archiजेवीएम की तकनीक (Java वर्चुअल मशीन)

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

JVM Archiटेक्चर

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 फ़ाइल में संग्रहीत है।

C कोड का मुख्य फ़ंक्शन a1.c

फंक्शन f1 को a2.c नामक फाइल में संग्रहित किया गया है।

C कोड फ़ंक्शन f1 a2.c

फंक्शन f2 को a3.c नामक फाइल में संग्रहित किया गया है।

C कोड फ़ंक्शन f2 a3.c

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

C कोड कंपाइलर ऑब्जेक्ट फ़ाइलें उत्पन्न करता है

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

C कोड लिंकर exe फ़ाइल बनाता है

प्रोग्राम चलने के दौरान, एक लोडर प्रोग्राम a.exe फ़ाइल को लोड करेगा। रैम निष्पादन के लिए।

C कोड लोडर exe फ़ाइल को RAM में लोड करता है।

Java कोड संकलन और निष्पादन Java VM

अब आइए प्रक्रिया पर एक नज़र डालते हैं। Javaआपके मेन कोड में दो मेथड हैं, f1 और f2।

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

Java यह कोड तीन फाइलों को क्लास फाइलों में कंपाइल करता है।

कंपाइलर तीनों फाइलों को कंपाइल करेगा और उनसे संबंधित तीन .class फाइलें तैयार करेगा, जिनमें बाइट कोड होगा। C के विपरीत, इसमें कोई लिंकिंग नहीं की जाती है।

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

Java क्लास लोडर क्लास फ़ाइलों को रैम में लाता है

इसके बाद, निष्पादन इंजन बाइटकोड को नेटिव मशीन कोड में परिवर्तित करेगा। इसे जस्ट-इन-टाइम कंपाइलिंग कहते हैं। यह उन मुख्य कारणों में से एक है जिनकी वजह से ऐसा संभव हो पाता है। Java तुलनात्मक रूप से धीमी है.

Java एक्जीक्यूशन इंजन बाइटकोड को नेटिव कोड में परिवर्तित करता है।

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

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

प्रोग्रामिंग की भाषाएँ इन्हें इस प्रकार वर्गीकृत किया गया है:

  • उच्च स्तरीय भाषा, उदाहरण के लिए, C++, Java
  • मध्य-स्तरीय भाषाएँ, जैसे कि C
  • निम्न-स्तरीय भाषा, उदाहरण के लिए, Assembly
  • अंत में, सबसे निचला स्तर मशीन भाषा के रूप में है।

A संकलक यह एक ऐसा प्रोग्राम है जो किसी प्रोग्राम को एक भाषा स्तर से दूसरे भाषा स्तर में परिवर्तित करता है। उदाहरण के लिए, एक प्रोग्राम का रूपांतरण। C++ प्रोग्राम को मशीन कोड में परिवर्तित करना। Java कंपाइलर उच्च-स्तरीय को परिवर्तित करता है Java कोड को बाइटकोड में परिवर्तित करना (जो कि मशीन कोड का एक प्रकार भी है)।

An दुभाषिया यह एक ऐसा प्रोग्राम है जो एक स्तर के प्रोग्राम को दूसरे स्तर की प्रोग्रामिंग भाषा में परिवर्तित करता है। वही स्तरउदाहरण के लिए, किसी चीज़ का रूपांतरण। Java कार्यक्रम में C++.

In Javaजस्ट-इन-टाइम कोड जनरेटर बाइटकोड को नेटिव मशीन कोड में परिवर्तित करता है, जो समान प्रोग्रामिंग स्तर पर होते हैं। अतः, Java यह एक संकलित भाषा होने के साथ-साथ एक व्याख्यात्मक भाषा भी है।

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

धीमी गति के पीछे दो मुख्य कारण हैं Java यह है:

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

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

अक्सर पूछे जाने वाले प्रश्न

JVM, Deeplearning4j, Weka और Apache जैसे AI और बिग-डेटा फ्रेमवर्क को चलाता है। Sparkइसके जस्ट-इन-टाइम कंपाइलर और मेमोरी मैनेजमेंट की मदद से ये लाइब्रेरी नेटिव कोड को दोबारा लिखे बिना ही विभिन्न प्लेटफॉर्म पर बड़े डेटासेट को कुशलतापूर्वक प्रोसेस कर सकती हैं।

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

JVM बाइटकोड चलाता है। JRE, JVM को चलाने के लिए आवश्यक कोर लाइब्रेरीज़ के साथ बंडल करता है। Java प्रोग्रामों के लिए। जेडीके में कंपाइलर और डीबगर जैसे विकास उपकरण शामिल हैं, इसलिए इसका उपयोग एप्लिकेशन बनाने के लिए किया जाता है।

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: