JVM - Wat is Java Virtual Machine & zijn architectuur

Inhoudsopgave:

Anonim

Wat is JVM?

Java Virtual Machine (JVM) is een engine die een runtime-omgeving biedt om de Java-code of -toepassingen 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. De Java-compiler produceert echter code voor een virtuele machine die bekend staat als Java Virtual Machine.

Hier is hoe JVM werkt

Ten eerste wordt Java-code in bytecode verwerkt. Deze bytecode wordt op verschillende machines geïnterpreteerd

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
  • Compilatie- en uitvoeringsproces van softwarecode
  • C-code compilatie- en uitvoeringsproces
  • Java-code compilatie- en uitvoeringsproces
  • Waarom wordt Java zowel geïnterpreteerd als gecompileerde taal?
  • Waarom is Java traag?

JVM-architectuur

Laten we nu in deze JVM-tutorial de architectuur van JVM begrijpen. JVM-architectuur in Java bevat classloader, geheugengebied, uitvoeringsengine enz.
Java Virtual Machine Architecture

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) Methode gebied

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

3) Hoop

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

4) JVM-taalstapels

Java-taalstapels slaan lokale variabelen op, en de 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 aanroepproces voor 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 Method Stacks

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

7) Uitvoeringsmotor

Het is een soort software dat 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 programmeerraamwerk. Hiermee kan Java-code die in een JVM wordt uitgevoerd, worden opgeroepen door bibliotheken en native applicaties.

9) Native Method Bibliotheken

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

Compilatie- en uitvoeringsproces van softwarecode

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

1) Editor - Om uw programma in te typen, kan hiervoor een notitieblok worden gebruikt

2) Compiler - Om uw hoge taalprogramma om te zetten in native machinecode

3) Linker - Om verschillende verwijzingen naar programmabestanden in uw hoofdprogramma samen te combineren.

4) Loader - 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 JVM 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-compileerproces in Java begrijpen. Laten we eerst een snelle blik werpen op het compileer- en koppelingsproces in C.

Stel dat je in het algemeen twee functies f1 en f2 hebt aangeroepen. De belangrijkste functie 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, dwz a1.c, a2.c en a3.c, worden naar de compiler gestuurd. Wiens output de corresponderende objectbestanden zijn die de machinecode zijn.

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

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

Compilatie en uitvoering van Java-code in Java VM

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

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

De compiler compileert de drie bestanden en produceert drie corresponderende .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 in het RAM. Tijdens de uitvoering worden de klassenbestanden met behulp van de klassenlader naar het RAM-geheugen gebracht. De BYTE-code wordt geverifieerd op 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 dat 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 middelhoog niveau Ex. C
  • Ex-vergadering op laag niveau
  • eindelijk het laagste niveau als de machinetaal.

Een compiler is een programma dat een programma converteert van het ene taalniveau naar het andere. Voorbeeldconversie van C ++ -programma naar machinecode.

De java-compiler zet Java-code op hoog niveau om in bytecode (wat ook een soort machinecode is).

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

In Java zet de Just In Time Code-generator de bytecode om in de oorspronkelijke machinecode die zich op dezelfde programmeerniveaus bevinden.

Daarom is Java zowel gecompileerde als geïnterpreteerde taal.

Waarom is Java traag?

De twee belangrijkste redenen voor de traagheid van Java zijn

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

De nieuwste versie van Java heeft de knelpunten in de prestaties echter grotendeels aangepakt.

Samenvatting :

  • De volledige vorm van JVM is Java Virtual Machine. JVM in Java is de motor die de Java-code aandrijft. Het zet Java-bytecode om in machinetaal.
  • JVM-architectuur in Java bevat classloader, geheugengebied, uitvoeringsengine enz.
  • In JVM wordt Java-code 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 Virtual Machine (JVM). Het wordt gebruikt om de uitvoeringstijd te versnellen
  • In vergelijking met andere compilermachines kan JVM in Java traag worden uitgevoerd.