logo

JVM (Java Virtual Machine) arkitektur

  1. Java Virtual Machine
  2. Intern arkitektur för JVM

JVM (Java Virtual Machine) är en abstrakt maskin. Det är en specifikation som tillhandahåller runtime-miljö där java-bytekod kan köras.

JVM är tillgängliga för många hårdvaru- och mjukvaruplattformar (dvs. JVM är plattformsberoende).

Vad är JVM

Det är:

tostring-metoden
  1. En specifikation där funktion av Java Virtual Machine specificeras. Men implementeringsleverantören är oberoende att välja algoritm. Dess implementering har tillhandahållits av Oracle och andra företag.
  2. Ett genomförande Dess implementering är känd som JRE (Java Runtime Environment).
  3. Runtime-instans När du skriver java-kommandot på kommandotolken för att köra java-klassen skapas en instans av JVM.

Vad den gör

JVM utför följande operation:

  • Laddar kod
  • Verifierar kod
  • Kör kod
  • Ger körtidsmiljö

JVM tillhandahåller definitioner för:

  • Minnesområde
  • Klass filformat
  • Register set
  • Avfallshög
  • Fatal felrapportering mm.

JVM arkitektur

Låt oss förstå den interna arkitekturen hos JVM. Den innehåller klassladdare, minnesområde, exekveringsmotor etc.

JVM arkitektur

1) Klassladdare

Classloader är ett undersystem till JVM som används för att ladda klassfiler. När vi kör java-programmet laddas det först av klassladdaren. Det finns tre inbyggda klassladdare i Java.

    Bootstrap ClassLoader: Detta är den första klassladdaren som är superklassen av Extension classloader. Den laddar rt.jar fil som innehåller alla klassfiler av Java Standard Edition som java.lang-paketklasser, java.net-paketklasser, java.util-paketklasser, java.io-paketklasser, java.sql-paketklasser etc.Tillägg ClassLoader: Detta är den underordnade klassladdaren för Bootstrap och den överordnade klassladdaren för System classloader. Den laddar jar-filerna som finns inuti $JAVA_HOME/jre/lib/ext katalog.System/applikation ClassLoader: Detta är den underordnade klassladdaren för Extension classloader. Den laddar klassfilerna från classpath. Som standard är klasssökväg inställd på aktuell katalog. Du kan ändra klasssökvägen med omkopplaren '-cp' eller '-classpath'. Det är också känt 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()); } } 
Testa det nu

Produktion:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Dessa är de interna klassladdare som tillhandahålls av Java. Om du vill skapa din egen klassladdare måste du utöka klassen ClassLoader.

2) Klass(Metod) Area

Class(Method) Area lagrar strukturer per klass som körtidskonstantenpoolen, fält- och metoddata, koden för metoder.

3) Hög

Det är körtidsdataområdet där objekt allokeras.

java int till dubbel

4) Stapla

Java Stack lagrar ramar. Den innehåller lokala variabler och delresultat, och spelar en roll i metodanrop och retur.

Varje tråd har en privat JVM-stack, skapad samtidigt som tråden.

En ny ram skapas varje gång en metod anropas. En ram förstörs när dess metodanrop är klar.

5) Programräknareregister

PC-registret (programräknare) innehåller adressen till den Java-virtuella maskininstruktion som för närvarande exekveras.

6) Native Method Stack

Den innehåller alla inhemska metoder som används i applikationen.

7) Utförandemotor

Det innehåller:

    En virtuell processor Tolk:Läs bytecode-strömmen och utför sedan instruktionerna.Just-In-Time(JIT) kompilator:Det används för att förbättra prestandan. JIT kompilerar delar av bytekoden som har liknande funktionalitet samtidigt, och minskar därmed mängden tid som behövs för kompilering. Här hänvisar termen 'kompilator' till en översättare från instruktionsuppsättningen för en virtuell Java-maskin (JVM) till instruktionsuppsättningen för en specifik CPU.

8) Java Native Interface

Java Native Interface (JNI) är ett ramverk som tillhandahåller ett gränssnitt för att kommunicera med en annan applikation skriven på ett annat språk som C, C++, Assembly etc. Java använder JNI-ramverket för att skicka utdata till konsolen eller interagera med OS-bibliotek.