JVM (Java Virtual Machine) एक abstract मशीन है। यह एक specification है जो रनटाइम environment प्रदान करता है जिसमें जावा बाइटकोड निष्पादित (Execute) किया जा सकता है।
जेवीएम कई हार्डवेयर और सॉफ्टवेयर प्लेटफॉर्म के लिए उपलब्ध हैं (यानी जेवीएम प्लेटफॉर्म पर निर्भर है)।
What is Java Virtual Machine?
- एक विनिर्देश जहां जावा वर्चुअल मशीन का कार्य निर्दिष्ट है। लेकिन एल्गोरिथम चुनने के लिए कार्यान्वयन प्रदाता स्वतंत्र है। इसका कार्यान्वयन Oracle और अन्य कंपनियों द्वारा प्रदान किया गया है।
- एक कार्यान्वयन इसके कार्यान्वयन को जेआरई (जावा रनटाइम एनवायरनमेंट) के रूप में जाना जाता है।
- रनटाइम इंस्टेंस जब भी आप जावा क्लास चलाने के लिए कमांड प्रॉम्प्ट पर जावा कमांड लिखते हैं, तो JVM का एक उदाहरण बन जाता है।
What JVM Do?
JVM निम्नलिखित ऑपरेशन करता है:
- लोड कोड (Load Codes)
- कोड सत्यापित करता है (Verify Code)
- कोड निष्पादित करता है (Execute Code)
- रनटाइम वातावरण प्रदान करता है (Provides runtime environment)
JVM इसके लिए परिभाषाएँ प्रदान करता है:
- स्मृति क्षेत्र (Memory area)
- वर्ग फ़ाइल स्वरूप (Class file format)
- रजिस्टर सेट (Register set)
- कूड़ा-कचरा इकट्ठा किया हुआ ढेर (Garbage-collected heap)
- घातक त्रुटि रिपोर्टिंग आदि (Fatal error reporting etc.)
Architecture of Java Virtual Machine
आइए जेवीएम की आंतरिक संरचना को समझते हैं। इसमें क्लासलोडर, मेमोरी एरिया, निष्पादन इंजन आदि शामिल हैं।

Classloader:
क्लासलोडर JVM का एक सबसिस्टम है जिसका उपयोग क्लास फाइल्स को लोड करने के लिए किया जाता है। जब भी हम जावा प्रोग्राम चलाते हैं, तो इसे पहले क्लास लोडर द्वारा लोड किया जाता है। जावा में तीन बिल्ट-इन क्लास लोडर हैं।
- बूटस्ट्रैप क्लासलोडर : यह पहला क्लासलोडर है जो एक्सटेंशन क्लासलोडर का सुपर क्लास है। यह rt.jar फ़ाइल को लोड करता है जिसमें Java.lang पैकेज क्लासेस, java.net पैकेज क्लासेस, java.util पैकेज क्लासेस, java.io पैकेज क्लासेस, java.sql पैकेज क्लासेस आदि जैसे जावा स्टैंडर्ड एडिशन की सभी क्लास फाइलें होती हैं।
- एक्सटेंशन क्लास लोडर : यह बूटस्ट्रैप का चाइल्ड क्लास लोडर और सिस्टम क्लास लोडर का पैरेंट क्लास लोडर है। यह $JAVA_HOME/jre/lib/ext निर्देशिका के अंदर स्थित जार फ़ाइलों को लोड करता है ।
- सिस्टम/एप्लिकेशन क्लासलोडर : यह एक्सटेंशन क्लासलोडर का चाइल्ड क्लासलोडर है। यह क्लासफाइल को क्लासपाथ से लोड करता है। डिफ़ॉल्ट रूप से, क्लासपाथ वर्तमान निर्देशिका पर सेट है। आप “-cp” या “-classpath” स्विच का उपयोग करके क्लासपाथ बदल सकते हैं। इसे एप्लिकेशन क्लासलोडर के रूप में भी जाना जाता है।
* चलिए क्लासलोडर नाम को प्रिंट करने के लिए एक उदाहरण देखते हैं
public class ClassLoaderExp
{
public static void main(String[] args){
// Let's print the classloader name of current class.
//Application/System classloader will load this class
Class c = ClassLoaderExp;
System.out.println (c.getClassLoader ());
//If we print the classloader name of String, it will print null because it is an
//in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader
System.out.println(String.class.getClassLoader());
}
}Javaआउटपुट:
sun.misc.Launcher$AppClassLoader@4e0e2f2b
0
ये जावा द्वारा प्रदान किए गए आंतरिक क्लासलोडर हैं। यदि आप अपना खुद का क्लास लोडर बनाना चाहते हैं, तो आपको क्लासलोडर क्लास का विस्तार करना होगा।
Class(Method) Area:
वर्ग (विधि) क्षेत्र (Class Method Area) प्रति-श्रेणी संरचनाओं को संग्रहीत करता है जैसे रनटाइम निरंतर पूल, फ़ील्ड और विधि डेटा, विधियों के लिए कोड।
Heap:
यह रनटाइम डेटा क्षेत्र है जिसमें ऑब्जेक्ट आवंटित किए जाते हैं।
Stack:
जावा स्टैक फ्रेम स्टोर करता है। यह स्थानीय चर और आंशिक परिणाम रखता है, और विधि मंगलाचरण और वापसी में एक भूमिका निभाता है।
प्रत्येक थ्रेड में एक निजी JVM स्टैक होता है, जिसे उसी समय थ्रेड के रूप में बनाया जाता है।
हर बार एक विधि लागू होने पर एक नया फ्रेम बनाया जाता है। इसकी विधि आमंत्रण पूर्ण होने पर एक फ्रेम नष्ट हो जाता है।
Program Counter Register:
पीसी (प्रोग्राम काउंटर) रजिस्टर में वर्तमान में निष्पादित जावा वर्चुअल मशीन इंस्ट्रक्शन का पता होता है।
Native Method Stack:
इसमें एप्लिकेशन में उपयोग की जाने वाली सभी मूल विधियां शामिल हैं।
Execution Engine:
- एक आभासी प्रोसेसर (A virtual processor)
- दुभाषिया (Interpreter): बायटेकोड स्ट्रीम पढ़ें और फिर निर्देशों को निष्पादित करें।
- जस्ट-इन-टाइम (JIT) कंपाइलर: इसका उपयोग प्रदर्शन को बेहतर बनाने के लिए किया जाता है। JIT बाइट कोड के कुछ हिस्सों को संकलित करता है जिनकी एक ही समय में समान कार्यक्षमता होती है, और इसलिए संकलन के लिए आवश्यक समय की मात्रा कम कर देता है। यहाँ, “कंपाइलर” शब्द एक जावा वर्चुअल मशीन (JVM) के निर्देश सेट से एक विशिष्ट CPU के निर्देश सेट के लिए एक अनुवादक को संदर्भित करता है।
Java Native Interface:
जावा नेटिव इंटरफ़ेस (जेएनआई) एक ढांचा है जो सी, सी ++, असेंबली इत्यादि जैसी अन्य भाषा में लिखे गए अन्य एप्लिकेशन के साथ संवाद करने के लिए एक इंटरफ़ेस प्रदान करता है। जावा कंसोल को आउटपुट भेजने या ओएस पुस्तकालयों के साथ बातचीत करने के लिए जेएनआई ढांचे का उपयोग करता है।

Welcome to HindiTutorials, your go-to platform for learning and mastering concepts in Hindi! Our mission is to make education accessible and simple for everyone by providing high-quality tutorials on programming, technology, and various other topics.