JVM | Wat is Java Virtual Machine en zijn architectuur?

Wat is JVM?

Java virtuele machine (JVM) is een engine die een runtime-omgeving biedt om de Java-code of applicaties aan te sturen. Het zet Java bytecode om in machinetaal. JVM is een onderdeel van Java Run Environment (JRE). In andere programmeertalen produceert de compiler machinecode voor een bepaald systeem. Java-compiler produceert echter code voor een virtuele machine die bekend staat als Java Virtual Machine.

Zo werkt JVM

Eerst wordt Java-code omgezet in bytecode. Deze bytecode wordt geïnterpreteerd op verschillende machines

Tussen hostsysteem en Java-bron is Bytecode een intermediaire taal.

JVM in Java is verantwoordelijk voor het toewijzen van geheugenruimte.

Werking van Java Virtual Machine (JVM)



In deze JVM-zelfstudie leert u-

JVM-architectuur

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

Architectuur van Java Virtual Machine

1) ClassLoader

De klassenlader is een subsysteem dat wordt gebruikt voor het laden van klassenbestanden. Het vervult drie belangrijke functies, namelijk. Laden, koppelen en initialiseren.

2) Methodegebied:

JVM Method Area slaat klassenstructuren op zoals metadata, de constante runtime-pool en de code voor methoden.

3) Hoop

Al de Voorwerpen , hun gerelateerde instantievariabelen en arrays worden opgeslagen in de heap. Dit geheugen is algemeen en wordt gedeeld door meerdere threads.

4) JVM-taalstacks

Java-taal Stacks slaan lokale variabelen op, en het zijn gedeeltelijke resultaten. Elke thread heeft zijn eigen JVM-stack, die tegelijkertijd wordt gemaakt terwijl de thread wordt gemaakt. Er wordt een nieuw frame gemaakt wanneer een methode wordt aangeroepen en het wordt verwijderd wanneer het proces voor het aanroepen van de methode is voltooid.

5) PC-registers

PC-register slaat het adres op van de Java-instructie voor de virtuele machine die momenteel wordt uitgevoerd. In Java heeft elke thread zijn eigen pc-register.

6) Native methode-stacks

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

7) Uitvoeringsengine:

Het is een type software dat wordt gebruikt om hardware, software of complete systemen te testen. De testuitvoeringsengine bevat nooit informatie over het geteste product.

8) Native methode-interface

De Native Method Interface is een programmeerraamwerk. Hiermee kan Java-code die in een JVM wordt uitgevoerd, worden aangeroepen door bibliotheken en native applicaties.

9) Bibliotheken met inheemse methoden

Native Libraries is een verzameling van de Native Libraries (C, C++) die nodig zijn voor de Execution Engine.

Compilatie- en uitvoeringsproces voor softwarecodes

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

1) Redacteur – Om uw programma in te typen, kan hiervoor een kladblok worden gebruikt

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

3) Links – Om verschillende programmabestanden in uw hoofdprogramma samen te voegen.

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

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

Raadpleeg met deze achtergrond de volgende video en leer de interne werking en architectuur van JVM (Java Virtual Machine) kennen.

Klik hier als de video niet toegankelijk is



C-code Compilatie- en uitvoeringsproces

Het Java-compilatieproces in Java begrijpen. Laten we eerst snel kijken naar het compileer- en koppelingsproces in C.

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

Functie f1 wordt opgeslagen in een bestand a2.c

Functie f2 wordt opgeslagen in een bestand a3.c

Al deze bestanden, d.w.z. a1.c, a2.c en a3.c, worden naar de compiler gevoerd. Waarvan de output de corresponderende objectbestanden zijn die de machinecode zijn.

De volgende stap is het integreren van al deze objectbestanden in een enkel .exe-bestand met behulp van linker. De linker zal al deze bestanden samenvoegen en produceert het .exe-bestand.

Tijdens het uitvoeren van het programma zal een laadprogramma a.exe in het RAM laden voor de uitvoering.

Java-code compileren en uitvoeren in Java VM

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

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

De compiler compileert de drie bestanden en produceert 3 overeenkomstige .class-bestanden die uit BYTE-code bestaan. In tegenstelling tot C wordt er niet gelinkt .

De Java VM of Java Virtual Machine bevindt zich in het RAM. Tijdens de uitvoering worden met behulp van de klassenlader de klassenbestanden naar het RAM-geheugen gebracht. De BYTE-code wordt geverifieerd op eventuele beveiligingsinbreuken.

Vervolgens converteert de uitvoeringsengine de bytecode naar native machinecode. Dit is net op tijd aan het compileren. Het is een van de belangrijkste redenen waarom Java relatief traag is.

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

Waarom is Java zowel geïnterpreteerde als gecompileerde taal?

Programmeertalen zijn geclassificeerd als:
  • Taal op hoger niveau bijv. C++, Java
  • Middelbare talen Ex. C
  • Ex-assemblage op laag niveau
  • tenslotte het laagste niveau als de machinetaal.

TOT compiler is een programma dat een programma converteert van het ene taalniveau naar het andere. Voorbeeld conversie van C++ programma naar machinecode.

De Java-compiler converteert Java-code op hoog niveau naar bytecode (wat ook een type machinecode is).

Een tolk is een programma dat een programma op het ene niveau converteert naar een andere programmeertaal op de hetzelfde niveau. Voorbeeldconversie van Java-programma naar C++

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

Daarom is Java zowel gecompileerde als geïnterpreteerde taal.

Waarom is Java traag?

De twee belangrijkste redenen achter de traagheid van Java zijn:

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

De nieuwste versie van Java heeft de prestatieknelpunten echter grotendeels aangepakt.

Samenvatting :

  • Volledige vorm van JVM is Java Virtual Machine. JVM in Java is de motor die de Java-code aanstuurt. Het zet Java bytecode om in machinetaal.
  • JVM-architectuur in Java bevat classloader, geheugengebied, uitvoeringsengine enz.
  • In JVM wordt Java-code gecompileerd tot bytecode. Deze bytecode wordt geïnterpreteerd op verschillende machines
  • JIT staat voor Just-in-time compiler. JIT is het onderdeel van de Java Virtual Machine (JVM). Het wordt gebruikt om de uitvoeringstijd te versnellen
  • In vergelijking met andere compilermachines kan JVM in Java traag worden uitgevoerd.