Was ist JVM?
Java Virtual Machine (JVM) ist eine Engine, die eine Laufzeitumgebung zum Steuern des Java-Codes oder der Java-Anwendungen bereitstellt. Es konvertiert Java-Bytecode in Maschinensprache. JVM ist Teil der Java Run Environment (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 bezeichnet wird.
So funktioniert JVM
Zunächst wird Java-Code in Bytecode umgewandelt. Dieser Bytecode wird auf verschiedenen Computern interpretiert
Zwischen dem Hostsystem und der Java-Quelle ist Bytecode eine Zwischensprache.
JVM in Java ist für die Zuweisung von Speicherplatz verantwortlich.

In diesem JVM-Tutorial lernen Sie:
- JVM-Architektur
- Software-Code-Kompilierungs- und Ausführungsprozess
- C-Code Kompilierungs- und Ausführungsprozess
- Kompilierungs- und Ausführungsprozess für Java-Code
- Warum wird Java sowohl interpretiert als auch kompiliert?
- Warum ist Java langsam?
JVM-Architektur
Lassen Sie uns nun in diesem JVM-Tutorial die Architektur von JVM verstehen. Die JVM-Architektur in Java enthält Klassenladeprogramm, Speicherbereich, Ausführungsmodul usw.
1) ClassLoader
Der Klassenlader ist ein Subsystem zum Laden von Klassendateien. Es führt drei Hauptfunktionen aus, nämlich. Laden, Verknüpfen und Initialisieren.
2) Methodenbereich
Im JVM-Methodenbereich werden Klassenstrukturen wie Metadaten, der konstante Laufzeitpool und der Code für Methoden gespeichert.
3) Haufen
Alle 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-Stapel, der gleichzeitig mit der Erstellung des Threads 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 des Java Virtual Machine-Befehls, der gerade ausgeführt wird. In Java hat jeder Thread ein eigenes PC-Register.
6) Native Method Stacks
Native Methodenstapel enthalten die Anweisung für nativen Code. Dies hängt von der nativen Bibliothek ab. Es ist in einer anderen Sprache anstelle von Java geschrieben.
7) Ausführungsmodul
Dies ist eine Art von Software, die zum Testen von Hardware, Software oder kompletten Systemen verwendet wird. Die Testausführungs-Engine enthält niemals Informationen über das getestete Produkt.
8) Native Method-Schnittstelle
Das Native Method Interface ist ein Programmierframework. Damit kann Java-Code, der in einer JVM ausgeführt wird, von Bibliotheken und nativen Anwendungen aufgerufen werden.
9) Native Method Libraries
Native Libraries ist eine Sammlung der Native Libraries (C, C ++), die von der Execution Engine benötigt werden.
Software-Code-Kompilierungs- und Ausführungsprozess
Um ein Softwareprogramm zu schreiben und auszuführen, benötigen Sie Folgendes
1) Editor - Um Ihr Programm einzugeben, kann hierfür ein Notizblock verwendet werden
2) Compiler - Zum Konvertieren Ihres Hochsprachenprogramms in nativen Maschinencode
3) Linker - Zum Kombinieren verschiedener Programmdateien in Ihrem Hauptprogramm.
4) Loader - Zum Laden der Dateien von Ihrem sekundären Speichergerät wie Festplatte, Flash-Laufwerk und CD zur Ausführung in den RAM. 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 das folgende Video und lernen Sie die interne Arbeitsweise und Architektur von JVM (Java Virtual Machine) kennen.
Klicken Sie hier, wenn das Video nicht zugänglich ist
C-Code Kompilierungs- und Ausführungsprozess
Um den Java-Kompilierungsprozess in Java zu verstehen. Lassen Sie uns zunächst einen kurzen Blick auf den Kompilierungs- und Verknüpfungsprozess in C werfen.
Angenommen, Sie haben hauptsächlich zwei Funktionen f1 und f2 aufgerufen. Die Hauptfunktion ist in der Datei a1.c. gespeichert.
Die Funktion f1 ist in einer Datei a2.c gespeichert
Die Funktion f2 ist in einer Datei a3.c gespeichert
Alle diese Dateien, dh a1.c, a2.c und a3.c, werden dem Compiler zugeführt. Wessen Ausgabe sind die entsprechenden Objektdateien, die den Maschinencode darstellen.
Der nächste Schritt besteht darin, alle diese Objektdateien mithilfe des Linkers in eine einzige EXE-Datei zu integrieren. Der Linker fasst alle diese Dateien zusammen und erstellt die EXE-Datei.
Während des Programmlaufs lädt ein Ladeprogramm a.exe zur Ausführung in den RAM.
Kompilierung und Ausführung von Java-Code in Java VM
Schauen wir uns nun in diesem JVM-Tutorial den Prozess für JAVA an. In Ihrem Haupt 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
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 mit dem Klassenladeprogramm in den RAM gebracht. Der BYTE-Code wird auf Sicherheitsverletzungen überprüft.
Als nächstes konvertiert die Ausführungs-Engine den Bytecode in nativen Maschinencode. Dies ist gerade in der Zeit zu kompilieren. Dies ist einer der Hauptgründe, warum Java vergleichsweise langsam ist.
HINWEIS: JIT oder Just-in-Time-Compiler ist Teil der Java Virtual Machine (JVM). Es interpretiert einen Teil des Bytecodes, der gleichzeitig ähnliche Funktionen hat.
Warum ist Java sowohl interpretierte als auch kompilierte Sprache?
Programmiersprachen werden als klassifiziert- Höhere Sprache Bsp. C ++, Java
- Mittelstufige Sprachen Bsp. C.
- Low-Level Language Ex Assembly
- Endlich die niedrigste Stufe als Maschinensprache.
Ein Compiler ist ein Programm, das ein Programm von einer Sprachebene in eine andere konvertiert. Beispielkonvertierung eines C ++ - Programms in Maschinencode.
Der Java-Compiler konvertiert Java-Code auf hoher Ebene in Bytecode (der auch eine Art Maschinencode ist).
Ein Interpreter ist ein Programm, das ein Programm auf einer Ebene in eine andere Programmiersprache auf derselben Ebene konvertiert . Beispielkonvertierung eines Java-Programms in C ++
In Java konvertiert der Just In Time Code-Generator den Bytecode in den nativen Maschinencode, der sich auf denselben Programmierebenen befindet.
Daher ist Java sowohl kompilierte als auch interpretierte Sprache.
Warum ist Java langsam?
Die beiden Hauptgründe für die Langsamkeit von Java sind
- Dynamische Verknüpfung: Im Gegensatz zu C erfolgt die Verknüpfung zur Laufzeit jedes Mal, wenn das Programm in Java ausgeführt wird.
- Laufzeitinterpreter: Die Konvertierung von Bytecode in nativen Maschinencode erfolgt zur Laufzeit in Java, wodurch die Geschwindigkeit weiter verlangsamt wird
Die neueste Version von Java hat jedoch die Leistungsengpässe 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 konvertiert Java-Bytecode in Maschinensprache.
- Die JVM-Architektur in Java enthält Klassenladeprogramm, Speicherbereich, Ausführungsmodul usw.
- In JVM wird Java-Code zu Bytecode kompiliert. Dieser Bytecode wird auf verschiedenen Computern 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.