Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

JVM erklärt: Was sie ist und ihre Architektur

Was ist die JVM?

Java Virtual Machine (JVM) ist die Laufzeit-Engine, die Java-Anwendungen antreibt. Sie transformiert kompilierten Java-Bytecode in native Maschineninstruktionen und führt sie auf jeder Plattform aus, die die JVM unterstützt. Die JVM ist eine Kernkomponente der Java Runtime Environment (JRE). Im Gegensatz zu Sprachen, die direkt in Maschinencode für ein spezifisches OS kompilieren, erzeugt Javas Compiler plattformagnostischen Bytecode, den die JVM zur Laufzeit interpretiert oder kompiliert.

Wie die JVM funktioniert

Java-Quellcode wird zunächst in Bytecode kompiliert, den die JVM dann interpretiert oder just-in-time (JIT) in nativen Code kompiliert. Die JVM verwaltet auch Speicherallokation, Thread-Scheduling und Interaktion mit nativen Bibliotheken.

JVM erklärt: Was sie ist und ihre Architektur

In diesem Tutorial lernen Sie:

JVM-Architektur

Das Design der JVM ist modular und besteht aus mehreren Subsystemen, die zusammenarbeiten, um Java-Code zu laden, zu verifizieren und auszuführen.

JVM erklärt: Was sie ist und ihre Architektur
  1. Class Loader – Lädt Class-Dateien und führt Linking (Verifikation, Preparation, Resolution) und Initialisierung durch.
  2. Method Area – Speichert Klassenstrukturen, Metadaten, Constant Pools und Methodencode.
  3. Heap – Hält alle Objekte, Instanzvariablen und Arrays. Wird von allen Threads geteilt.
  4. Java Stack – Jeder Thread hat einen eigenen Stack für lokale Variablen und Teilresultate. Ein neuer Frame wird bei Methodenaufruf erstellt und bei Beendigung entfernt.
  5. Program Counter (PC) Register – Hält die Adresse der nächsten auszuführenden Instruktion für jeden Thread.
  6. Native Method Stack – Speichert Aufrufe von nativem Code (in C/C++ geschrieben).
  7. Execution Engine – Führt Bytecode aus, entweder durch Interpretation oder via JIT-Compiler.
  8. Native Method Interface (JNI) – Ermöglicht Java-Code den Aufruf nativer Bibliotheken.
  9. Native Libraries – Sammlungen plattformspezifischen nativen Codes, genutzt von der Execution Engine.

Software-Code-Kompilierung & Ausführungsprozess

Die Ausführung eines Programms umfasst typischerweise diese Schritte:

  1. Editor – Wo Sie den Quellcode schreiben.
  2. Compiler – Übersetzt High-Level-Code in nativen Maschinencode oder Bytecode.
  3. Linker – Kombiniert Objektdateien und löst externe Referenzen auf.
  4. Loader – Lädt das finale Executable in den Speicher.
  5. Execution – Betriebssystem und Prozessor führen das Programm aus.

C-Code-Kompilierung und -Ausführung

Zur Veranschaulichung des Java-Prozesses betrachten wir zuerst ein einfaches C-Programm. Angenommen, die main-Funktion liegt in a1.c und ruft f1 (in a2.c) und f2 (in a3.c) auf.

JVM erklärt: Was sie ist und ihre Architektur

Der Compiler wandelt jede .c-Datei in eine Objektdatei mit Maschinencode um. Der Linker vereint diese Objektdateien zu einem einzelnen .exe-Executable. Beim Programmstart mapped der Loader myapp.exe in den RAM und das OS beginnt die Ausführung.

JVM erklärt: Was sie ist und ihre Architektur

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

Java folgt einem ähnlichen, aber distincten Workflow. Die Quelldateien a1.java, a2.java und a3.java werden in Bytecode-Dateien a1.class, a2.class und a3.class kompiliert. Es gibt keine separate Linking-Phase; die JVM lädt den Bytecode on-demand.

JVM erklärt: Was sie ist und ihre Architektur

Während der Ausführung lädt der Class Loader der JVM die Class-Dateien in den Speicher, verifiziert sie auf Sicherheit, und die Execution Engine interpretiert oder JIT-kompiliert den Bytecode in nativen Maschinencode. Dieser JIT-Schritt macht Java sowohl kompiliert als auch interpretiert.

JVM erklärt: Was sie ist und ihre Architektur

Hinweis: Der JIT-Compiler ist eine Kernkomponente der JVM, die On-the-fly-Übersetzung von Bytecode in effiziente native Instruktionen durchführt.

Warum Java sowohl kompiliert als auch interpretiert ist

Javas Design vereint die Vorteile kompilierter und interpretierter Sprachen:

Warum ist Java langsamer?

Javas Laufzeit-Overhead stammt aus zwei Hauptquellen:

  1. Dynamisches Linking – Methoden werden zur Laufzeit statt zur Kompilierzeit aufgelöst, was einen kleinen Lookup-Kosten verursacht.
  2. Laufzeit-Bytecode-Interpretation – Selbst mit JIT verursacht die initiale Ausführung von Bytecode Konvertierungskosten, bevor nativer Code produziert wird.

Moderne JVM-Implementierungen haben diese Overheads durch aggressive Optimierung, gestaffelte Kompilierung und hardwarespezifisches Tuning drastisch reduziert.

Zusammenfassung

Java

  1. Was ist CNC? – Computer Numerical Control für die moderne Fertigung verstehen
  2. Java 10: Thread-Local Handshakes (JEP 312) – Schnellere VM-Safepoints
  3. Drehen verstehen: Ein Schlüsselprozess der Präzisionszerspanung
  4. Architekturentwurf: Prinzipien, Praxis und Wirkung
  5. Maschinenschrauben (Machine Bolts): Typen, Festigkeitsklassen, Montage & Drehmoment
  6. Spinnmaschinen (Spinning Machines) verstehen: Von der Faser zum Garn
  7. Frischmilch-Automaten (Milch-Tankstellen): Komfortabel, Günstig, Ökologisch
  8. Horizontale Bohrwerke erklärt: Aufbau, Betrieb und Anwendungen
  9. Automatische Pressen verstehen: Funktion, Vorteile und Anwendungen
  10. Maschinenbeschickung erklärt: Vorteile, Automatisierung & Anwendungen