Was ist JVM (Java Virtual Machine): Architektur erklärt!

Was ist JVM?

Java Virtual Machine (JVM) ist eine Engine, die eine Laufzeitumgebung zum Antreiben des Java-Codes oder von Anwendungen bereitstellt. Es wandelt Java-Bytecode in Maschinensprache um. JVM ist Teil der Java Runtime Environment (JRE). In anderen Programmiersprachen erstellt der Compiler Maschinencode für ein bestimmtes System. Der Java-Compiler erzeugt jedoch Code für eine virtuelle Maschine, die als Java Virtual Machine bekannt ist.

Wie funktioniert JVM?

Zunächst wird Java-Code in Bytecode kompiliert. Dieser Bytecode wird auf verschiedenen Maschinen interpretiert

Zwischen Hostsystem und Java-Quelle ist Bytecode eine Vermittlersprache.

JVM in Java ist für die Zuweisung von Speicherplatz verantwortlich.


Wie JVM funktioniert
Funktionsweise der Java Virtual Machine (JVM)



In diesem JVM-Tutorial lernen Sie-

JVM Architektur

Lassen Sie uns nun in diesem JVM-Tutorial das verstehen ArchiStruktur von JVM. JVM archiDie Struktur in Java enthält einen Klassenlader, einen Speicherbereich, eine Ausführungs-Engine usw.


JVM Architektur
Java virtuelle Maschine Architektur


1) Klassenlader
Der Klassenlader ist ein Subsystem zum Laden von Klassendateien. Es erfüllt drei Hauptfunktionen viz. Laden, Verknüpfen und Initialisieren.

2) Methodenbereich
Der JVM-Methodenbereich speichert Klassenstrukturen wie Metadaten, den konstanten Laufzeitpool und den Code für Methoden.

3) Haufen
Um so Objekte, ihre zugehörigen Instanzvariablen und Arrays werden im Heap gespeichert. Dieser Speicher ist gemeinsam und wird von mehreren Threads gemeinsam genutzt.

4) JVM-Sprachstapel
Java-Sprachstacks speichern lokale Variablen und deren Teilergebnisse. Jeder Thread verfügt über einen eigenen JVM-Stack, der gleichzeitig erstellt wirdneoNormalerweise, wenn der Thread erstellt wird. Bei jedem Aufruf einer Methode wird ein neuer Frame erstellt und nach Abschluss des Methodenaufrufs gelöscht.

5) PC-Register
Das PC-Register speichert die Adresse der Java Virtual Machine-Anweisung, die gerade ausgeführt wird. In Java verfügt jeder Thread über ein separates PC-Register.

6) Native Methodenstapel
Native Methodenstapel enthalten Anweisungen für nativen Code, der von der nativen Bibliothek abhängt. Es ist in einer anderen Sprache statt in Java geschrieben.

7) Ausführungs-Engine
Dabei handelt es sich um eine Art Software zum Testen von Hardware, Software oder kompletten Systemen. Die Testausführungs-Engine übermittelt niemals Informationen über das getestete Produkt.

8) Native Method-Schnittstelle
Das Native Method Interface ist ein Programmierframework. Es ermöglicht den Aufruf von Java-Code, der in einer JVM ausgeführt wird, durch Bibliotheken und native Anwendungen.

9) Native Methodenbibliotheken
Native Libraries ist eine Sammlung der nativen Bibliotheken (C, C++), die von der Execution Engine benötigt werden.

Prozess der Kompilierung und Ausführung von Softwarecode

Um ein Softwareprogramm zu schreiben und auszuführen, benötigen Sie Folgendeswing

1) Herausgeber – Um Ihr Programm einzugeben, können Sie hierfür einen Notizblock verwenden

2) Compiler – Um Ihr Hochsprachenprogramm in nativen Maschinencode umzuwandeln

3) Linker – Um verschiedene Programmdateien in Ihrem Hauptprogramm miteinander zu verknüpfen.

4) Lader – Zum Laden der Dateien von Ihrem sekundären Speichergerät wie Festplatte, Flash-Laufwerk oder CD in den RAM zur Ausführung. Das Laden erfolgt automatisch, wenn Sie Ihren Code ausführen.

5) Ausführung – Tatsächliche Ausführung des Codes, der von Ihrem Betriebssystem und Prozessor verarbeitet wird.

Lesen Sie vor diesem Hintergrund Folgendeswing Video & lernen Sie die interne Arbeitsweise der JVM kennen und archiStruktur von JVM (Java Virtual Machine).

Klicken Sie hier wenn das Video nicht zugänglich ist

C-Code-Kompilierungs- und Ausführungsprozess

Den Java-Kompilierungsprozess in Java verstehen. Werfen wir zunächst einen kurzen Blick auf den Kompilierungs- und Verknüpfungsprozess in C.

Angenommen, Sie haben im Wesentlichen zwei Funktionen f1 und f2 aufgerufen. Die Hauptfunktion ist in der Datei a1.c gespeichert.

C-Code-Kompilierungs- und Ausführungsprozess

Die Funktion f1 wird in einer Datei a2.c gespeichert

C-Code-Kompilierungs- und Ausführungsprozess

Die Funktion f2 wird in einer Datei a3.c gespeichert

C-Code-Kompilierungs- und Ausführungsprozess

Alle diese Dateien, also a1.c, a2.c und a3.c, werden dem Compiler zugeführt. Deren Ausgabe sind die entsprechenden Objektdateien, die den Maschinencode darstellen.

C-Code-Kompilierungs- und Ausführungsprozess

Der nächste Schritt besteht darin, alle diese Objektdateien mithilfe eines Linkers in eine einzige .exe-Datei zu integrieren. Der Linker fügt alle diese Dateien zusammen und erstellt die .exe-Datei.

C-Code-Kompilierungs- und Ausführungsprozess

Während des Programmlaufs lädt ein Ladeprogramm eine.exe in das RAM für die Ausführung.

C-Code-Kompilierungs- und Ausführungsprozess

Kompilierung und Ausführung von Java-Code in Java VM

Schauen wir uns nun in diesem JVM-Tutorial den Prozess für JAVA an. Im Wesentlichen haben Sie zwei Methoden f1 und f2.

  • Die Hauptmethode ist in der Datei a1.java gespeichert
  • f1 wird in einer Datei als a2.java gespeichert
  • f2 wird in einer Datei als a3.java gespeichert

Kompilierung und Ausführung von Java-Code in Java VM

Der Compiler kompiliert die drei Dateien und erzeugt drei entsprechende .class-Dateien, die aus BYTE-Code bestehen. Im Gegensatz zu C erfolgt keine Verknüpfung.

Die Java VM oder Java Virtual Machine befindet sich im RAM. Während der Ausführung werden die Klassendateien mithilfe des Klassenladers in den RAM gebracht. Der BYTE-Code wird auf etwaige Sicherheitsverstöße überprüft.

Kompilierung und Ausführung von Java-Code in Java VM

Als nächstes wandelt die Ausführungs-Engine den Bytecode in nativen Maschinencode um. Das ist gerade noch rechtzeitig zum Kompilieren. Dies ist einer der Hauptgründe, warum Java vergleichsweise langsam ist.

Kompilierung und Ausführung von Java-Code in Java VM

Anmerkungen: JIT oder Just-in-Time-Compiler ist der Teil der Java Virtual Machine (JVM). Es interpretiert einen Teil des Bytecodes, der gleichzeitig eine ähnliche Funktionalität hat.

Warum ist Java sowohl eine interpretierte als auch eine kompilierte Sprache?

Programmiersprachen sind klassifiziert als

  • Höhere Sprachkenntnisse Bsp. C + +, Java
  • Mittelniveausprachen Bsp. C
  • Low-Level-Sprache Ex-Assembly
  • schließlich die unterste Ebene als Maschinensprache.

A Compiler ist ein Programm, das ein Programm von einer Sprachebene in eine andere konvertiert. Beispielkonvertierung eines C++-Programms in Maschinencode.

Der Java-Compiler konvertiert High-Level-Java-Code in Bytecode (der auch eine Art Maschinencode ist).

An Dolmetscher ist ein Programm, das ein Programm auf einer Ebene in eine andere Programmiersprache umwandelt das selbe Level. Beispielkonvertierung eines Java-Programms in C++

In Java der Just-In-Time-Code generator wandelt den Bytecode in den nativen Maschinencode um, der sich auf den gleichen Programmierebenen befindet.

Daher ist Java sowohl eine kompilierte als auch eine interpretierte Sprache.

Warum ist Java langsam?

Die beiden Hauptgründe für die Langsamkeit von Java sind:

  1. Dynamische Verknüpfung: Im Gegensatz zu C erfolgt die Verknüpfung zur Laufzeit, also jedes Mal, wenn das Programm in Java ausgeführt wird.
  2. Laufzeitinterpreter: Die Konvertierung von Bytecode in nativen Maschinencode erfolgt in Java zur Laufzeit, was die Geschwindigkeit weiter verlangsamt

Die neueste Version von Java hat die Leistungsengpässe jedoch weitgehend behoben.

Zusammenfassung:

  • Die vollständige Form von JVM ist Java Virtual Machine. JVM in Java ist die Engine, die den Java-Code steuert. Es wandelt Java-Bytecode in Maschinensprache um.
  • JVM archiDie Struktur in Java enthält einen Klassenlader, einen Speicherbereich, eine Ausführungs-Engine usw.
  • In JVM wird Java-Code zu Bytecode kompiliert. Dieser Bytecode wird auf verschiedenen Maschinen interpretiert
  • JIT steht für Just-in-Time-Compiler. JIT ist der Teil der Java Virtual Machine (JVM). Es wird verwendet, um die Ausführungszeit zu beschleunigen
  • Im Vergleich zu anderen Compilermaschinen kann die Ausführung von JVM in Java langsam sein.