JVM | Was ist Java Virtual Machine & seine Architektur

Was ist JVM?

Java Virtual Machine (JVM) ist eine Maschine, die eine Laufzeitumgebung zur Steuerung des Java-Codes oder der Anwendungen bietet. Sie wandelt Java-Bytecode in Maschinensprache um. Die JVM ist ein Teil der Java-Laufumgebung (JRE). In anderen Programmiersprachen erzeugt 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.

So funktioniert die JVM

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

Zwischen dem Host-System und dem Java-Quellcode ist der Bytecode eine Zwischensprache.

Die JVM in Java ist für die Allokation von Speicherplatz zuständig.

Wie funktioniert die JVM
Arbeitsweise der Java Virtual Machine (JVM)

In diesem JVM-Tutorial, lernen Sie-

  • JVM-Architektur
  • Prozess der Kompilierung von Softwarecode &Ausführung
  • Prozess der Kompilierung und Ausführung von C-Code
  • Prozess der Kompilierung und Ausführung von Java-Code
  • Warum ist Java sowohl interpretierte als auch kompilierte Sprache?
  • Warum ist Java langsam?

JVM-Architektur

Nun wollen wir in diesem JVM-Tutorial die Architektur der JVM verstehen. Die JVM-Architektur in Java enthält den Classloader, den Speicherbereich, die Execution Engine usw.

JVM Architektur
Java Virtual Machine Architektur

1) ClassLoader

Der ClassLoader ist ein Subsystem zum Laden von Klassendateien. Er führt drei Hauptfunktionen aus, nämlich das Laden, Verknüpfen und Initialisieren.

2) Method Area

Die Method Area der CVM speichert Klassenstrukturen wie Metadaten, den Konstanten-Laufzeitpool und den Code für Methoden.

3) Heap

Alle Objekte, ihre zugehörigen Instanzvariablen und Arrays werden im Heap gespeichert. Dieser Speicher ist gemeinsam und wird von mehreren Threads genutzt.

4) JVM-Sprachstapel

Java-Sprachstapel speichern lokale Variablen und ihre Teilergebnisse. Jeder Thread hat seinen eigenen JVM-Stack, der gleichzeitig mit dem Erzeugen des Threads angelegt wird. Ein neuer Stapel wird bei jedem Methodenaufruf erstellt und nach Abschluss des Methodenaufrufs gelöscht.

5) PC-Register

PC-Register speichern die Adresse der Anweisung der Java Virtual Machine, die gerade ausgeführt wird. In Java hat jeder Thread sein eigenes PC-Register.

6) Native Methodenstapel

Native Methodenstapel halten die Anweisungen des nativen Codes, der von der nativen Bibliothek abhängt. Sie ist nicht in Java, sondern in einer anderen Sprache geschrieben.

7) Execution Engine

Es handelt sich um eine Art von Software, die zum Testen von Hardware, Software oder kompletten Systemen verwendet wird. Die Testausführungsengine trägt niemals Informationen über das getestete Produkt.

8) Native Method Interface

Das Native Method Interface ist ein Programmierrahmen. Es ermöglicht Java-Code, der in einer JVM läuft, den Aufruf durch Bibliotheken und native Anwendungen.

9) Native Methodenbibliotheken

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

Software Code Compilation & Ausführungsprozess

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

1) Editor – Um Ihr Programm einzutippen, ein Notizblock könnte dafür verwendet werden

2) Compiler – Um Ihr Hochsprachenprogramm in nativen Maschinencode umzuwandeln

3) Linker – Um verschiedene Programmdateien, die in Ihrem Hauptprogramm referenziert werden, miteinander zu kombinieren.

4) Loader – Zum Laden der Dateien von Ihrem sekundären Speichermedium wie Festplatte, Flash Drive, CD in den RAM zur Ausführung. Das Laden erfolgt automatisch, wenn Sie Ihren Code ausführen.

5) Execution – Die eigentliche Ausführung des Codes, die von Ihrem OS &-Prozessor übernommen wird.

Vor diesem Hintergrund lernen Sie im folgenden Video & die interne Arbeitsweise und Architektur der JVM (Java Virtual Machine) kennen.

Klicken Sie hier, wenn das Video nicht zugänglich ist

C-Code Kompilierungs- und Ausführungsprozess

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

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

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Die Funktion f1 ist in der Datei a2.c

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Funktion f2 ist in einer Datei a3 gespeichert.c

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

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

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Der nächste Schritt ist die Integration all dieser Objektdateien in eine einzige .exe-Datei mit Hilfe des Linkers. Der Linker fügt alle diese Dateien zusammen und erzeugt die .exe-Datei.

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Während des Programmlaufs lädt ein Loader-Programm eine.exe in den Arbeitsspeicher zur Ausführung.

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

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

Nun wollen wir uns in diesem JVM-Tutorial den Prozess für JAVA ansehen. In Ihrem main haben Sie zwei Methoden f1 und f2.

  • Die main-Methode ist in der Datei a1.java gespeichert
  • f1 ist in einer Datei als a2.java gespeichert
  • f2 ist in einer Datei als a3 gespeichert.java

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Der Compiler kompiliert die drei Dateien und erzeugt 3 entsprechende .class-Dateien, die aus BYTE-Code bestehen. Im Gegensatz zu C wird kein Linking durchgeführt.

Die Java VM oder Java Virtual Machine befindet sich im RAM. Während der Ausführung werden die Klassendateien mit Hilfe des Klassenladers auf den RAM gebracht. Der BYTE-Code wird auf eventuelle Sicherheitslücken überprüft.

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Nächstens wandelt die Ausführungsmaschine den Bytecode in nativen Maschinencode um. Dies ist eine Just-in-Time-Kompilierung. Es ist einer der Hauptgründe, warum Java vergleichsweise langsam ist.

Arbeitsweise der Java Virtual Machine(JVM) ihre Architektur

Hinweis: JIT oder Just-in-time-Compiler ist der Teil der Java Virtual Machine (JVM). Er interpretiert einen Teil des Byte-Codes, der gleichzeitig eine ähnliche Funktionalität hat.

Warum ist Java sowohl interpretierte als auch kompilierte Sprache?

Programmiersprachen werden klassifiziert als

  • Higher Level Language Ex. C++, Java
  • Middle-Level-Sprachen Bsp. C
  • Low-Level-Sprache Bsp. Assembly
  • Schließlich die niedrigste Ebene wie die Maschinensprache.

Ein Compiler ist ein Programm, das ein Programm von einer Sprachebene in eine andere umwandelt. Beispiel: Umwandlung eines C++-Programms in Maschinencode.

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

Ein Interpreter ist ein Programm, das ein Programm auf einer Ebene in eine andere Programmiersprache auf der gleichen Ebene umwandelt. Beispiel: Konvertierung eines Java-Programms in C++

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

Damit 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. Dynamisches Linken: Im Gegensatz zu C erfolgt das Linken zur Laufzeit, also jedes Mal, wenn das Programm in Java ausgeführt wird.
  2. Laufzeit-Interpreter: Die Umwandlung 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. Die JVM in Java ist der Motor, der den Java-Code antreibt. Sie wandelt Java-Bytecode in Maschinensprache um.
  • Die JVM-Architektur in Java enthält einen Classloader, einen Speicherbereich, eine Ausführungs-Engine usw.
  • In der JVM wird der 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 Compiler-Maschinen kann die JVM in Java langsam in der Ausführung sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.