logo

JVM (Java Virtual Machine) arkitektur

  1. Java Virtual Machine
  2. Intern arkitektur av JVM

JVM (Java Virtual Machine) er en abstrakt maskin. Det er en spesifikasjon som gir kjøretidsmiljø der java-bytekode kan kjøres.

JVM-er er tilgjengelige for mange maskinvare- og programvareplattformer (dvs. JVM er plattformavhengig).

Hva er JVM

Det er:

  1. En spesifikasjon hvor arbeid av Java Virtual Machine er spesifisert. Men implementeringsleverandøren er uavhengig til å velge algoritmen. Implementeringen er levert av Oracle og andre selskaper.
  2. En gjennomføring Implementeringen er kjent som JRE (Java Runtime Environment).
  3. Kjøretidsforekomst Hver gang du skriver java-kommando på ledeteksten for å kjøre java-klassen, opprettes en forekomst av JVM.

Hva det gjør

JVM utfører følgende operasjon:

  • Laster inn kode
  • Verifiserer kode
  • Utfører kode
  • Gir kjøretidsmiljø

JVM gir definisjoner for:

  • Minneområde
  • Klasse filformat
  • Register sett
  • Søppel samlet haug
  • Fatal feilrapportering etc.

JVM arkitektur

La oss forstå den interne arkitekturen til JVM. Den inneholder klasselaster, minneområde, utførelsesmotor etc.

JVM arkitektur

1) Klasselaster

Classloader er et undersystem av JVM som brukes til å laste klassefiler. Hver gang vi kjører java-programmet, lastes det først av klasselasteren. Det er tre innebygde klasselastere i Java.

    Bootstrap ClassLoader: Dette er den første klasselasteren som er superklassen til Extension classloader. Den laster inn rt.jar fil som inneholder alle klassefiler av Java Standard Edition som java.lang-pakkeklasser, java.net-pakkeklasser, java.util-pakkeklasser, java.io-pakkeklasser, java.sql-pakkeklasser osv.Utvidelse ClassLoader: Dette er den underordnede klasselasteren til Bootstrap og den overordnede klasselasteren til System classloader. Den laster inn jar-filene som ligger inne $JAVA_HOME/jre/lib/ext katalog.System/applikasjon ClassLoader: Dette er den underordnede klasselasteren til Extension classloader. Den laster klassefilene fra classpath. Som standard er klassesti satt til gjeldende katalog. Du kan endre klassebanen ved å bruke '-cp' eller '-classpath'-bryteren. Det er også kjent som Application classloader.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
Test det nå

Produksjon:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Dette er de interne klasselasterne levert av Java. Hvis du vil lage din egen klasselaster, må du utvide ClassLoader-klassen.

2) Klasse(metode) område

Class(Method) Area lagrer strukturer per klasse, slik som kjøretidskonstantpoolen, felt- og metodedata, koden for metoder.

3) Haug

Det er kjøretidsdataområdet der objekter er allokert.

4) Stable

Java Stack lagrer rammer. Den inneholder lokale variabler og delresultater, og spiller en rolle i metodeanrop og retur.

Hver tråd har en privat JVM-stabel, opprettet samtidig med tråden.

En ny ramme opprettes hver gang en metode påkalles. En ramme blir ødelagt når metodeanropet er fullført.

5) Programtellerregister

PC-registeret (programteller) inneholder adressen til den virtuelle Java-maskininstruksjonen som kjøres for øyeblikket.

6) Native Method Stack

Den inneholder alle de opprinnelige metodene som brukes i applikasjonen.

7) Utførelsesmotor

Det inneholder:

    En virtuell prosessor Tolk:Les bytekodestrømmen og utfør deretter instruksjonene.Just-In-Time (JIT) kompilator:Den brukes til å forbedre ytelsen. JIT kompilerer deler av bytekoden som har lignende funksjonalitet på samme tid, og reduserer dermed tiden som trengs for kompilering. Her refererer begrepet 'kompilator' til en oversetter fra instruksjonssettet til en Java Virtual Machine (JVM) til instruksjonssettet til en spesifikk CPU.

8) Java Native Interface

Java Native Interface (JNI) er et rammeverk som gir et grensesnitt for å kommunisere med en annen applikasjon skrevet på et annet språk som C, C++, Assembly etc. Java bruker JNI-rammeverket for å sende utdata til konsollen eller samhandle med OS-biblioteker.