logo

JVM (Java Virtual Machine) arkitektur

  1. Java virtuel maskine
  2. Intern arkitektur af JVM

JVM (Java Virtual Machine) er en abstrakt maskine. Det er en specifikation, der giver et runtime-miljø, hvor java bytecode kan udføres.

JVM'er er tilgængelige for mange hardware- og softwareplatforme (dvs. JVM er platformafhængig).

Hvad er JVM

Det er:

  1. En specifikation hvor funktion af Java Virtual Machine er specificeret. Men implementeringsudbyderen er uafhængig til at vælge algoritmen. Implementeringen er leveret af Oracle og andre virksomheder.
  2. En implementering Dens implementering er kendt som JRE (Java Runtime Environment).
  3. Runtime Forekomst Hver gang du skriver java-kommando på kommandoprompten for at køre java-klassen, oprettes en forekomst af JVM.

Hvad det gør

JVM udfører følgende handling:

  • Indlæser kode
  • Verificerer kode
  • Udfører kode
  • Giver runtime miljø

JVM giver definitioner for:

  • Hukommelsesområde
  • Klasse filformat
  • Register sæt
  • Affaldsbunke
  • Fatal fejlrapportering mm.

JVM arkitektur

Lad os forstå den interne arkitektur af JVM. Den indeholder klasseindlæser, hukommelsesområde, udførelsesmotor osv.

JVM arkitektur

1) Klasseindlæser

Classloader er et undersystem af JVM, som bruges til at indlæse klassefiler. Når vi kører java-programmet, indlæses det først af klasseindlæseren. Der er tre indbyggede klasseindlæsere i Java.

    Bootstrap ClassLoader: Dette er den første klasseindlæser, som er superklassen af ​​Extension-klasseindlæser. Den indlæser rt.jar fil, som indeholder alle klassefiler af Java Standard Edition som java.lang-pakkeklasser, java.net-pakkeklasser, java.util-pakkeklasser, java.io-pakkeklasser, java.sql-pakkeklasser osv.Udvidelse ClassLoader: Dette er den underordnede klasseindlæser af Bootstrap og den overordnede klasseindlæser af System klasseindlæser. Den indlæser jar-filerne, der er placeret indeni $JAVA_HOME/jre/lib/ext vejviser.System/applikation ClassLoader: Dette er den underordnede klasseindlæser af Extension classloader. Den indlæser klassefilerne fra klassestien. Som standard er klassestien indstillet til den aktuelle mappe. Du kan ændre klassestien ved at bruge '-cp' eller '-classpath' switch. Det er også kendt 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 nu

Produktion:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Disse er de interne klasseindlæsere leveret af Java. Hvis du vil oprette din egen klasseindlæser, skal du udvide ClassLoader-klassen.

2) Klasse(metode) område

Class(Method) Area gemmer strukturer pr. klasse, såsom runtime-konstantenpuljen, felt- og metodedata, koden for metoder.

3) Hobe

Det er runtime-dataområdet, hvor objekter er allokeret.

4) Stak

Java Stack gemmer rammer. Den indeholder lokale variabler og delresultater og spiller en rolle i metodepåkaldelse og returnering.

Hver tråd har en privat JVM-stack, oprettet samtidig med tråden.

En ny ramme oprettes hver gang en metode påkaldes. En ramme ødelægges, når dens metodekald er fuldført.

5) Programtællerregister

PC-registret (programtæller) indeholder adressen på den virtuelle Java-maskine-instruktion, der i øjeblikket udføres.

6) Native Method Stack

Den indeholder alle de native metoder, der bruges i applikationen.

7) Udførelsesmotor

Det indeholder:

    En virtuel processor Tolk:Læs bytecode stream og udfør derefter instruktionerne.Just-In-Time (JIT) compiler:Det bruges til at forbedre ydeevnen. JIT kompilerer dele af bytekoden, der har lignende funktionalitet på samme tid, og reducerer dermed den nødvendige tid til kompilering. Her refererer udtrykket 'compiler' til en oversætter fra instruktionssættet på en Java virtuel maskine (JVM) til instruktionssættet for en specifik CPU.

8) Java Native Interface

Java Native Interface (JNI) er en ramme, der giver en grænseflade til at kommunikere med en anden applikation skrevet på et andet sprog som C, C++, Assembly osv. Java bruger JNI framework til at sende output til konsollen eller interagere med OS biblioteker.