What is JVM & JIT
इस tutorial में, हम Java environment के दो main components ( Java Virtual Machine और Just in Time Compiler ) के बारे में जानेंगे। हम उनकी internal structure और Java programs को execute करने के लिए कैसे काम करते हैं, इसके बारे में जानेंगे।
Java Virtual Machine (JVM)
JVM virtually एक machine है जिस पर Java programs actually में run होते हैं। एक Java program JVM के बिना machine पर run नहीं हो सकता। यह Java Runtime Environment (JRE) का एक मुख्य (core) part है।
JVM कई specifications से भरा हुआ है जो Java program को successfully चलाने के लिए perfectly काम करता है। यह nature से platform-dependent है यानी प्रत्येक प्रकार के operating system के लिए एक अलग JVM है।
एक developer को JVM को install करने और configure करने के बारे में चिंता करने की आवश्यकता नहीं है। यह JDK package के साथ built-in आता है।
Java का platform-independent feature JVM द्वारा possible होआ है। JVM वह है जो Java bytecode को machine-understandable code में convert कर सकता है।
Java bytecode से machine code में Conversion करने के लिए JVM के अंदर कई specifications होते है।
Specifications of JVM
ClassLoader
ClassLoader JVM का एक subpart है। यह मुख्य रूप से .class file को read करता है जो javac command का use करके generate की गयी होती है, उस file से कुछ key information को निकालती है, और उस information को Method Area में store करती है। ClassLoader से classe और उनके names, variables, methods, interfaces, आदि जैसी information प्राप्त कर सकते हैं।
Method Area
एक Method Area एक store की तरह होता है जहाँ सभी class level information जैसे class names, variable names, method names, enums आदि store किए जाते हैं। यह JVM में एक unique area है जिसे अन्य classes के बीच share किया जाता है।
Heap
हम जानते हैं कि Java एक object-oriented programming language है, जहाँ सब कुछ object के रूप में होता है। ये object real units हैं जिन्हें काम करने के लिए memory की requirement होती है। JVM में Heap java programs के execution के दौरान बनाए गए objects के बारे में सभी data और information को store करता है। method area की तरह ही, केवल एक heap area ही है जो JVM में एक shared resource है।
PC Registers
program counter register (PC register) JVM में registers को store करता है। ये register current instruction का address store करते हैं जिसे execute किया जा रहा है। Java एक multi-threaded programming language है जिसका अर्थ है कि एक ही समय में multiple threads चल सकते हैं। Java execute किए जा रहे प्रत्येक thread के address को store करने के लिए multiple PC register provide करता है।
Execution Engine
execution engine वह है जो actually में Java bytecode (.class files) को JVM के अंदर execute करता है। execute engine line द्वारा .class files के contents को read करता है और फिर machine code (जो computer द्वारा understand किया जाता है) में convert होने वाली information को निकालता है। execution engine में तीन subpart होते हैं जो कि program को complete करने में help करते हैं।
Interpreter
interpreter वह है जो एक time में sequentially एक line में bytecode को पढ़ता है।
Just In Time (JIT) Compile
JIT compiler का use mainly program execution की overall efficiency में improvements के लिए किया जाता है। यह एक time में machine code को bytecode को परिवर्तित करता है। जब भी interpreter को another repeated bytecode मिलता है, तो JIT compiler उस time compiled machine code provide करता है।
Garbage Collector
program execution के दौरान Java द्वारा created प्रत्येक object memory को कसमस करता है। इन objects को बाद में program द्वारा refer नहीं किया जाता है और इसलिए कोई use नहीं होता है। इन unrestricted objects को memory में manage करने के लिए garbage collector द्वारा memory से removed कर दिया जाता है। इससे memory की capacity increase होती है।