Java एक उच्च स्तारिये प्रोग्रामिंग भाषा (high level programming language) है| उच्च स्तर प्रोग्रामिंग भाषा में लिखा गया प्रोग्राम सीधे किसी machine पर नही चलाया जा सकता| उच्च स्तरीय भाषा में लिखे गये program को सबसे पहले मशीनी भाषा में अनुवादित (translate) करना होता है, इसके लिए java में “javac” का उपयोग किया जाता है, यह Java program (.java फाइल जिसमे source कोड होता है) लेता है, और इसे machine कोड (बाइट कोड या .class फाइल) में अनुवादित (translate) करता है|
What is Java Virtual Machine
Java Virtual Machine (JVM) एक वर्चुअल machine है जो आपके कंप्यूटर में होती है compiler के लिए अलग अलग प्रकारों की मशीनो के लिए बाइट कोड तैयार करने की अपेक्षा JVM के लिए बाइट कोड तैयार करना ज्यादा आसान है| JVM compiler द्वारा तैयार किये गये बाइट कोड को निष्पादित (execute) करता है | JVM के कारण ही Java को प्लेटफार्म स्वतंत्र भाषा (platform independent language ) कहा जाता है|
तो, अब हम ये तो समझ ही चुके है कि JVM का प्राथमिक कार्य compiler द्वारा तैयार किये गये बाइट कोड को निष्पादित (execute) करना होता है| प्रत्येक ऑपरेटिंग सिस्टम का अपना एक JVM होता है, हालाकि JVM द्वारा जो output तैयार की जाती है वह सभी ऑपरेटिंग सिस्टम्स के लिए सामान होती है| इसका मतलब है कि जो बाइट कोड JVM द्वारा Windows पर तैयार किया गया है, उसे Mac ऑपरेटिंग सिस्टम पर चलाया जा सकता है, इसलिए Java को प्लेटफार्म स्वतंत्र भाषा (platform independent language) कहा जाता है|
अगर हम संक्षेप में बात करे तो Java Virtual Machine एक Virtual Machine है जो आपके कंप्यूटर में होती है और Java बाइट कोड को निष्पादित (execute) करती है| JVM, Java source कोड को नहीं समझ सकता इसीलिए javac compiler का उपयोग किया जाता है| JVM Java को portable बनाती है मतलव इसी JVM के कारण हम java में लिखा गया कोड किसी भी machine पर चला सकते है, प्रत्येक ऑपरेटिंग सिस्टम का एक अपना JVM होता है हालाकि JVM द्वारा जो output तैयार की जाती है वह सभी ऑपरेटिंग सिस्टम्स के लिए सामान होती है|
JVM Architecture
- Class Loader – यह .class फाइल को पढ़ता है और method area में bytecode को रखता है|
- Method Area – JVM में एक method area होता है जो की सभी क्लास्सेस के बीच बटा हुआ होता है|
- Heap – यह JVM का एक हिस्सा है जहा ऑब्जेक्ट्स स्टोर होते है, JVM .class फाइल के लिए class ऑब्जेक्ट तैयार करता है|
- Stack – Stack, Heap से अलग JVM मेमोरी का एक हिस्सा है इसका उपयोग आस्थाई चरो (temporary variables) को store करने के लिए किया जाता है|
- PC Register – यह ट्रैक रखता है की किस निर्देश (instruction) को निष्पादित (execute) किया गया है किस निर्देश (instruction) को निष्पादित (execute) किया जा रहा है हालाकि निर्देश (instructions) thread में निष्पादित किये जाते है, प्रत्येक thread में एक अलग PC Register होता है|
- Native method interface – यह java कोड को देशी एप्लीकेशन्स (native applications) द्वारा call करने में सक्षम बनाता है native एप्लीकेशन ऐसे प्रोग्र्रम होते है जो किसी सिस्टम के हार्डवेयर और ऑपरेटिंग सिस्टम के लिए विशिष्ट होते है|
- Garbage collection – एक class instance स्पस्ट रूप से java कोड द्वारा बनाया गया है और उपयोग के बाद यह मेमोरी प्रबंधन (memory management) के लिए कचरा संग्रह (garbage collection) द्वारा स्वचालित रूप से नष्ट हो जाता है|
JVM, JRE और JDK में अंतर
JRE – JRE वह वातावरण है जिसके अंदर java virtual machine चलती है| JRE में development टूल्स को अलावा java virtual machine, क्लास लाइब्रेरीज (class libraries), कम्पाइलर (compiler) और डिबगर (debugger) जैसे टूल्स होते है, जिसका अर्थ है की आप JRE में कोड चला सकते है लेकिन आप JRE में कोड को विकसित और compile नही कर सकते |
JVM – JVM, क्लास लाइब्रेरीज (class libraries) और JRE द्वारा प्रदान की गई फाइलों का उपयोग करके program को रन कराता है|
JDK – JDK में वह सब कुछ है जो JRE में उपलब्ध है इसके साथ ही इसमें development tools जैसे compiler, debugger इत्यादि भी उपलब्ध है| कुल मिलाकर JDK, JRE का सुपरसेट है|