java virtual machine hindi
JVM (java virtual machine)
Java Virtual Machine एक runtime environment provide करने के लिए एक specification है | जिस पर एक bytecode execute किया जा सकता है। jvm तैयार किए गए platform specific हैं और लगभग सभी hardware और machine के लिए उपलब्ध हैं।
JVM कई hardware और Software platform के लिए उपलब्ध हैं (यानी JVM platform पर निर्भर है)।
यह एक specification हैं जहां Java Virtual Machine का काम specified है। लेकिन implementation provider algorithm चुनने के लिए independent है। इसका implementation oracle और अन्य कंपनियों द्वारा provide किया गया है।
इसका implementation java runtime environment के रूप में किया जाता है।
Runtime Instance जब भी आप java class चलाने के लिए command prompt पर java command लिखते हैं तो JVM का एक उदाहरण बन जाता है।
features of JVM
- यह एक class को load करने के लिए class loader provoide करता है |
- यह bytecode को verify legality करने के लिए bytecode verifier provide करता है |
- यह bytecode को executes करता है |
- यह एक runtime provides करता है
JVM Architecture
classloader :- Loading, linking and initialization
classloader JVM का एक subsystem है जिसका उपयोग class file को load करने के लिए किया जाता है। जब भी हम java program चलाते हैं | तो इसे पहले loader द्वारा load किया जाता है। java में तीन built-in classloaders हैं।
Bootstrap ClassLoader: यह पहला class loader है जो Extension classloader का super class है। यह rt.jar file को load करता है जिसमें Java Standard Edition की सभी category की files होती हैं जैसे की java.lang package classes, , java.net package classes, java.util package classes, java.io package classes, java.sql package classes आदि।
Extension ClassLoader: यह Bootstrap का child classloader और System classloader का parent classloader है। यह $ JAVA_HOME / jre / lib / directory के अंदर स्थित jar files को load करता है।
System/Application ClassLoader: : यह Extension classloader का child classloader है। यह classpath को classpath से load करता है। defualt रूप से classpath को current directory में set किया जाता है। आप “-cp” या “-classpath” switch का उपयोग करके classpath को बदल सकते हैं। इसे Application classloader के रूप में भी जाना जाता है।
java application को WORA (Write Once Run Anywhere) कहा जाता है। इसका मतलब यह है कि एक programmer एक system पर java code developed कर सकता है और यह उम्मीद कर सकता है कि यह बिना किसी adjustment के किसी भी अन्य Java enabled system पर चल सकता है। यह सब JVM की वजह से संभव हुआ है।
Class(Method) Area :-
class (method) Area per-class structures को stores करता है जैसे कि runtime constant pool field और method data method के लिए code |
method area में सभी class level की जानकारी जैसे कि class name, parent class name, methods और variables information आदि को stored किया जाता है | जिसमें static variables शामिल हैं।
Heap :- यह runtime data area है जिसमें objects allocated किए जाते हैं।
सभी objects की जानकारी heap area में stored है। per JVM में एक heap area है। यह एक shared resource भी है।
Stack :- Java Stack frames को stores करता है। यह local variables और partial results रखता है | method invocation और return में एक भूमिका निभाता है।
हर एक thread में एक private JVM stack होता है | जिसे thread के रूप में एक ही समय में बनाया जाता है।
एक method invoked होने पर हर बार एक नया frame बनाया जाता है। एक frame destroyed हो जाता है जब उसका तरीका invocation पूरा किया जाता है।
PC Registers :- एक thread के current execution instruction का store address है कि हर एक thread में अलग-अलग PC Registers होते हैं।
Native Method Stack :- इसमें application में उपयोग किए जाने वाले सभी native तरीके शामिल हैं।
हर thread के लिए अलग native stack बनाया जाता है। यह native method जानकारी stored करता है।
Execution Engine :- Execution engine .class (bytecode) को execute करता है। यह byte-code को line by line पढ़ता है | various memory area में मौजूद data और जानकारी का उपयोग करता है और instructions को execute करता है।
इसे तीन part में classified किया गया है: –
इसे तीन part में classified किया गया है: –
Interpreter : यह bytecode को line by line से interprets करता है | और फिर executes करता है। यहां disadvantage यह है कि जब एक method को कई बार call किया जाता है तो हर बार interpretation की आवश्यकता होती है।
Just-In-Time Compiler(JIT) : इसका उपयोग interpreter की efficiency को बढ़ाने के लिए किया जाता है। यह पूरे bytecode को compiles करता है और इसे native code में बदल देता है | इसलिए जब भी interpreter बार-बार method calls होता है | तो JIT उस part के लिए direct native code provide करता है | फिर से re-interpretation की आवश्यकता नहीं है | इस प्रकार efficiency में सुधार किया जाता है।
Garbage Collector : यह un-referenced object को destroy कर देता है। Garbage Collector पर अधिक डालें Garbage Collector को देखता है ।
virtual processor भी execution engine का part है |
Java Native Interface (JNI) : यह एक interface है जो Native Method Libraries के साथ interacts करता है और execution के लिए आवश्यक native libraries (C, C ++) provide करता है। यह JVM को C / C ++ libraries को call करने और C / C ++ libraries द्वारा call करने में सक्षम बनाता है जो hardware के लिए specific हो सकते हैं।
Native Method Libraries : यह Native Libraries (C, C ++) का एक collection है जो Execution Engine द्वारा आवश्यक हैं।