logo

JVM-Architektur (Java Virtual Machine).

  1. Java virtuelle Maschine
  2. Interne Architektur von JVM

JVM (Java Virtual Machine) ist eine abstrakte Maschine. Es handelt sich um eine Spezifikation, die eine Laufzeitumgebung bereitstellt, in der Java-Bytecode ausgeführt werden kann.

JVMs sind für viele Hardware- und Softwareplattformen verfügbar (d. h. JVM ist plattformabhängig).

Was ist JVM?

Es ist:

  1. Eine Spezifikation wo die Funktionsweise der Java Virtual Machine angegeben ist. Der Implementierungsanbieter ist jedoch unabhängig bei der Auswahl des Algorithmus. Die Implementierung wurde von Oracle und anderen Unternehmen bereitgestellt.
  2. Eine Umsetzung Seine Implementierung ist als JRE (Java Runtime Environment) bekannt.
  3. Laufzeitinstanz Immer wenn Sie an der Eingabeaufforderung einen Java-Befehl schreiben, um die Java-Klasse auszuführen, wird eine Instanz von JVM erstellt.

Was es macht

Die JVM führt den folgenden Vorgang aus:

  • Lädt Code
  • Verifiziert Code
  • Führt Code aus
  • Stellt eine Laufzeitumgebung bereit

JVM bietet Definitionen für Folgendes:

  • Speicherbereich
  • Klassendateiformat
  • Registersatz
  • Müllsammelhaufen
  • Meldung schwerwiegender Fehler usw.

JVM-Architektur

Lassen Sie uns die interne Architektur von JVM verstehen. Es enthält Klassenlader, Speicherbereich, Ausführungs-Engine usw.

JVM-Architektur

1) Klassenlader

Classloader ist ein Subsystem der JVM, das zum Laden von Klassendateien verwendet wird. Immer wenn wir das Java-Programm ausführen, wird es zuerst vom Klassenlader geladen. In Java gibt es drei integrierte Klassenlader.

    Bootstrap-Klassenlader: Dies ist der erste Klassenlader, der die Superklasse des Erweiterungs-Klassenladers ist. Es lädt die rt.jar Datei, die alle Klassendateien der Java Standard Edition enthält, wie z. B. java.lang-Paketklassen, java.net-Paketklassen, java.util-Paketklassen, java.io-Paketklassen, java.sql-Paketklassen usw.Erweiterung ClassLoader: Dies ist der untergeordnete Klassenlader von Bootstrap und der übergeordnete Klassenlader des System-Klassenladers. Es lädt die darin befindlichen JAR-Dateien $JAVA_HOME/jre/lib/ext Verzeichnis.System-/Anwendungsklassenlader: Dies ist der untergeordnete Klassenlader des Erweiterungs-Klassenladers. Es lädt die Klassendateien aus dem Klassenpfad. Standardmäßig ist der Klassenpfad auf das aktuelle Verzeichnis eingestellt. Sie können den Klassenpfad mit den Schaltern „-cp“ oder „-classpath“ ändern. Es wird auch als Anwendungsklassenlader bezeichnet.
 //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()); } } 
Testen Sie es jetzt

Ausgabe:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

Dies sind die von Java bereitgestellten internen Klassenlader. Wenn Sie Ihren eigenen Klassenlader erstellen möchten, müssen Sie die Klasse ClassLoader erweitern.

2) Klassenbereich (Methodenbereich).

Der Klassenbereich (Methodenbereich) speichert klassenspezifische Strukturen wie den Laufzeitkonstantenpool, Feld- und Methodendaten sowie den Code für Methoden.

3) Haufen

Es handelt sich um den Laufzeitdatenbereich, in dem Objekte zugeordnet werden.

4) Stapeln

Java Stack speichert Frames. Es enthält lokale Variablen und Teilergebnisse und spielt eine Rolle beim Methodenaufruf und bei der Rückgabe.

Jeder Thread verfügt über einen privaten JVM-Stack, der gleichzeitig mit dem Thread erstellt wird.

Java-Wert der Zeichenfolge

Bei jedem Aufruf einer Methode wird ein neuer Frame erstellt. Ein Frame wird zerstört, wenn sein Methodenaufruf abgeschlossen ist.

5) Programmzählerregister

Das PC-Register (Programmzähler) enthält die Adresse der aktuell ausgeführten Java Virtual Machine-Anweisung.

6) Nativer Methodenstapel

Es enthält alle in der Anwendung verwendeten nativen Methoden.

7) Ausführungs-Engine

Es beinhaltet:

    Ein virtueller Prozessor Dolmetscher:Lesen Sie den Bytecode-Stream und führen Sie dann die Anweisungen aus.Just-In-Time(JIT)-Compiler:Es dient der Leistungssteigerung. JIT kompiliert Teile des Bytecodes, die gleichzeitig eine ähnliche Funktionalität haben, und reduziert so den Zeitaufwand für die Kompilierung. Der Begriff „Compiler“ bezieht sich hier auf einen Übersetzer vom Befehlssatz einer Java Virtual Machine (JVM) in den Befehlssatz einer bestimmten CPU.

8) Java Native-Schnittstelle

Java Native Interface (JNI) ist ein Framework, das eine Schnittstelle für die Kommunikation mit einer anderen Anwendung bereitstellt, die in einer anderen Sprache wie C, C++, Assembly usw. geschrieben ist. Java verwendet das JNI-Framework, um Ausgaben an die Konsole zu senden oder mit Betriebssystembibliotheken zu interagieren.