Wat is JVM? Java Virtuele machine Architectuur

Wat is JVM in Java?

Java Virtuele machine (JVM) is een engine die een runtime-omgeving biedt om de Java Code of applicaties. Het converteert Java bytecode in machinetaal. JVM maakt deel uit van Java Runtime-omgeving (JRE). In andere programmeertalen produceert de compiler machinecode voor een bepaald systeem. Echter, Java compiler produceert code voor een virtuele machine die bekend staat als Java Virtuele machine.

Hoe werkt JVM?

Eerste, Java code wordt gecompileerd in bytecode. Deze bytecode wordt geïnterpreteerd op verschillende machines. Tussen hostsysteem en Java bron, Bytecode is een intermediaire taal. JVM in Java is verantwoordelijk voor het toewijzen van geheugenruimte.


Hoe JVM werkt
Werken van Java Virtuele machine (JVM)

In deze JVM-tutorial leert u:

Archistructuur van JVM (Java Virtuele machine)

Laten we nu in deze JVM-tutorial de Archiarchitectuur van JVM. JVM-architectuur in Java bevat classloader, geheugengebied, uitvoeringsengine enz.

 


JVM Architectuur
Java Virtuele machine Architectuur

1) KlasseLoader
De class loader is een subsysteem dat wordt gebruikt voor het laden van class files. Het voert drie belangrijke functies uit, namelijk: laden, koppelen en initialiseren.

2) Methodegebied
JVM Method Area slaat klassestructuren op, zoals metagegevens, de constante runtimepool en de code voor methoden.

3) Hoop
Alle Objecten, worden hun gerelateerde instantievariabelen en arrays opgeslagen in de heap. Dit geheugen is gebruikelijk en wordt gedeeld door meerdere threads.

4) JVM-taalstapels
Java taal Stacks slaan lokale variabelen op, en de gedeeltelijke resultaten ervan. Elke thread heeft zijn eigen JVM-stack, die gelijktijdig wordt gemaakt als de thread wordt gemaakt. Een nieuw frame wordt gemaakt wanneer een methode wordt aangeroepen, en het wordt verwijderd wanneer het proces van het aanroepen van de methode is voltooid.

5) PC-registers
PC-register slaat het adres op van de Java virtuele machine-instructie die momenteel wordt uitgevoerd. In Java, heeft elke thread een afzonderlijk pc-register.

6) Native methodestapels
Native methodestapels bevatten de instructie van native code, afhankelijk van de native bibliotheek. Het is geschreven in een andere taal in plaats van Java.

7) Uitvoeringsmotor
Het is een soort software die wordt gebruikt om hardware, software of complete systemen te testen. De testuitvoeringsengine bevat nooit informatie over het geteste product.

8) Native Method-interface
De Native Method Interface is een programmeerframework. Het staat het toe Java code die in een JVM draait en kan worden aangeroepen door bibliotheken en native applicaties.

9) Native methodebibliotheken
Native Libraries is een verzameling van de Native Libraries (C, C++) die nodig zijn voor de uitvoeringsengine.

Compilatie- en uitvoeringsproces van softwarecode

Om een ​​softwareprogramma te schrijven en uit te voeren, hebt u het volgende nodig

1) Redacteur – Om uw programma in te typen, hiervoor kunt u een notitieblok gebruiken

2) Compiler – Om uw hoogtaalprogramma om te zetten in native machinecode

3) Linker – Om verschillende programmabestanden in uw hoofdprogramma te combineren.

4) Lader – Om de bestanden van uw secundaire opslagapparaat zoals harde schijf, flashdrive of cd in RAM te laden voor uitvoering. Het laden gebeurt automatisch wanneer u uw code uitvoert.

5) Uitvoering – Daadwerkelijke uitvoering van de code die wordt afgehandeld door uw besturingssysteem en processor.

Bekijk met deze achtergrond de volgende video en leer de interne werking en architectuur van JVM (Java virtuele machine).

Klik hier als de video niet toegankelijk is

Compilatie- en uitvoeringsproces van C-code

Om het te begrijpen Java compileerproces in JavaLaten we eerst even snel kijken naar het compileren en linken van processen in C.

Stel dat u in het hoofdbestand twee functies f1 en f2 hebt aangeroepen. De hoofdfunctie is opgeslagen in bestand a1.c.

Compilatie- en uitvoeringsproces van C-code

Functie f1 wordt opgeslagen in een bestand a2.c

Compilatie- en uitvoeringsproces van C-code

Functie f2 wordt opgeslagen in een bestand a3.c

Compilatie- en uitvoeringsproces van C-code

Al deze bestanden, d.w.z. a1.c, a2.c en a3.c, worden naar de compiler gestuurd. De output hiervan zijn de overeenkomstige objectbestanden die de machinecode vormen.

Compilatie- en uitvoeringsproces van C-code

De volgende stap is het integreren van al deze objectbestanden in één .exe-bestand met behulp van linker. De linker voegt al deze bestanden samen en produceert het .exe-bestand.

Compilatie- en uitvoeringsproces van C-code

Tijdens de uitvoering van het programma laadt een laadprogramma a.exe in het RAM voor de executie.

Compilatie- en uitvoeringsproces van C-code

Java code compileren en uitvoeren in Java VM

Laten we nu in deze JVM-tutorial eens kijken naar het proces voor JAVA. In principe heb je twee methoden f1 en f2.

  • De hoofdmethode is opgeslagen in bestand a1.java
  • f1 wordt opgeslagen in een bestand als a2.java
  • f2 wordt opgeslagen in een bestand als a3.java

Java code compileren en uitvoeren in Java VM

De compiler compileert de drie bestanden en produceert drie overeenkomstige .class-bestanden die uit BYTE-code bestaan. In tegenstelling tot C vindt er geen koppeling plaats.

De Java VM of Java Virtual Machine bevindt zich op het RAM. Tijdens de uitvoering worden de class-bestanden met behulp van de class loader naar het RAM gebracht. De BYTE-code wordt gecontroleerd op eventuele beveiligingsinbreuken.

Java code compileren en uitvoeren in Java VM

Vervolgens zal de uitvoeringsengine de bytecode omzetten in native machinecode. Dit is just-in-time compileren. Het is een van de belangrijkste redenen waarom Java is relatief langzaam.

Java code compileren en uitvoeren in Java VM

NOTITIE: JIT of Just-in-time compiler is het onderdeel van de Java Virtuele machine (JVM). Het interpreteert een deel van de bytecode die tegelijkertijd een vergelijkbare functionaliteit heeft.

Waarom is Java zowel geïnterpreteerde als gecompileerde taal?

Programmeertalen zijn geclassificeerd als

  • Taal op hoger niveau, bijv. C++, Java
  • Talen op middelbaar niveau, bijv. C
  • Taal op laag niveau Ex Assembly
  • tenslotte het laagste niveau als de machinetaal.

A compiler is een programma dat een programma van het ene taalniveau naar het andere omzet. Voorbeeld conversie van C++ programma naar machinecode. De Java-compiler converteert Java-code op hoog niveau naar bytecode (wat ook een type machinecode is).

An tolk is een programma dat een programma op één niveau omzet naar een andere programmeertaal op hetzelfde moment hetzelfde niveau. Voorbeeld conversie van Java programma in C++

In JavaDe Just In Time Code-generator converteert de bytecode naar de oorspronkelijke machinecode die zich op hetzelfde programmeerniveau bevindt.

Vandaar, Java is zowel gecompileerde als geïnterpreteerde taal.

Waarom is Java langzaam?

De twee belangrijkste redenen achter de traagheid van Java zijn

  1. Dynamisch koppelen: In tegenstelling tot C wordt het koppelen tijdens runtime uitgevoerd, elke keer dat het programma wordt uitgevoerd Java.
  2. Runtime-tolk: De conversie van bytecode naar native machinecode gebeurt tijdens runtime Java wat de snelheid verder vertraagt

Echter, de nieuwste versie van Java heeft de knelpunten in de prestaties grotendeels aangepakt.

Samenvatting:

  • Volledige vorm van JVM is Java Virtuele machine. JVM in Java is de motor die de Java Code. Het converteert Java bytecode in machinetaal.
  • JVM-architectuur in Java bevat classloader, geheugengebied, uitvoeringsengine enz.
  • In JVM, Java code wordt gecompileerd naar bytecode. Deze bytecode wordt op verschillende machines geïnterpreteerd
  • JIT staat voor Just-in-time compiler. JIT is het onderdeel van de Java Virtuele machine (JVM). Wordt gebruikt om de uitvoeringstijd te versnellen
  • In vergelijking met andere compilermachines biedt JVM in Java kan traag zijn in de uitvoering.