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