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:
- 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.
- Eine Umsetzung Seine Implementierung ist als JRE (Java Runtime Environment) bekannt.
- 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.
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.
//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:
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.