Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java
Java is een programmeertaal op hoog niveau. Een programma geschreven in hoge taal kan niet worden uitgevoerd op een machine direct. Ten eerste moet het worden vertaald in die specifieke machinetaal. De javac compiler doet dit ding, het duurt java programma (.java-bestand met broncode) en vertaalt het in machinecode (aangeduid als byte-code of .klassebestand).,
Java Virtual Machine (JVM) is een virtuele machine die zich in de echte machine (uw computer) bevindt en de machinetaal voor JVM is byte code. Dit maakt het makkelijker voor compiler omdat het byte code voor JVM moet genereren in plaats van verschillende machine code voor elk type machine. JVM voert de byte code die door compiler wordt gegenereerd uit en produceert output. JVM is degene die java platform onafhankelijk maakt.
dus, nu begrepen we dat de primaire functie van JVM is om de byte code uit te voeren die door de compiler wordt geproduceerd., Elk besturingssysteem heeft verschillende JVM, nochtans is de output die zij na uitvoering van bytecode produceren hetzelfde over alle besturingssystemen. Wat betekent dat de byte code gegenereerd op Windows kan worden uitgevoerd op Mac OS en vice versa. Daarom noemen we java als platformonafhankelijke taal. Hetzelfde kan worden gezien in het onderstaande diagram:
om alles samen te vatten: de Java Virtual machine (JVM) is de virtuele machine die draait op de werkelijke machine (uw computer) en Java byte code uitvoert., De JVM begrijpt Java broncode niet, daarom hebben we javac compiler nodig die * compileert.java bestanden te verkrijgen *.class bestanden die de byte codes bevatten begrepen door de JVM. JVM maakt java portable (Schrijf een keer, overal draaien). Elk besturingssysteem heeft verschillende JVM, nochtans is de output die zij na uitvoering van bytecode produceren hetzelfde over alle besturingssystemen.
JVM architectuur
laten we zien hoe JVM werkt:
Class Loader: de class loader leest de .,class file en sla de byte code op in het method area.
Methodegebied: er is slechts één methodegebied in een JVM dat onder alle klassen wordt gedeeld. Dit bevat de klasse niveau informatie van elk .klassebestand.
Heap: Heap is een onderdeel van JVM-geheugen waar objecten worden toegewezen. JVM maakt een klasse object voor elk .klassebestand.
Stack: Stack is ook een deel van JVM-geheugen, maar in tegenstelling tot Heap, wordt het gebruikt voor het opslaan van tijdelijke variabelen.
PC Registers: hiermee wordt bijgehouden welke instructie is uitgevoerd en welke zal worden uitgevoerd., Omdat instructies worden uitgevoerd door threads, heeft elke thread een apart PC-register.
Native Method stack: een native methode kan toegang krijgen tot de runtime data gebieden van de virtuele machine.
Native Method interface: Hiermee kan java-code aanroepen of aangeroepen worden door native applicaties. Native applicaties zijn programma ‘ s die specifiek zijn voor de hardware en het besturingssysteem van een systeem.
Garbage collection: een klasse instantie wordt expliciet gemaakt door de java-code en na gebruik wordt het automatisch vernietigd door garbage collection voor geheugenbeheer.,
JVM Vs JRE Vs JDK
JRE: JRE is de omgeving waarin de java virtuele machine draait. JRE bevat Java virtual Machine( JVM), class libraries, en andere bestanden met uitzondering van ontwikkeltools zoals compiler en debugger.
wat betekent dat je de code in JRE kunt draaien, maar je kunt de code niet in JRE ontwikkelen en compileren.
JVM: zoals we hierboven hebben besproken, draait JVM het programma met behulp van klasse, bibliotheken en bestanden die door JRE worden geleverd.,
JDK: JDK is een superset van JRE, het bevat alles wat JRE heeft samen met ontwikkeltools zoals compiler, debugger etc.