JDK, JRE und JVM erklärt: Wichtige Unterschiede und Zusammenarbeit
Was ist das Java Development Kit (JDK)?
Das JDK ist ein umfassendes Toolkit, das Entwicklern ermöglicht, Java-Anwendungen zu schreiben, zu kompilieren, zu debuggen und auszuführen. Es enthält den Java-Compiler (javac), Kernklassenbibliotheken und eine Suite von Entwicklungstools wie Debugger und JavaDoc. Das Kit ist für Windows, macOS, Linux und Solaris verfügbar, und mehrere Versionen können auf demselben Rechner koexistieren.
Was ist die Java Runtime Environment (JRE)?
Die JRE ist das Laufzeitpaket, das einem Computer ermöglicht, Java-Programme auszuführen. Sie bündelt die Java Virtual Machine (JVM), Kernbibliotheken und unterstützende Dateien. Nicht-Entwickler, die nur Java-Anwendungen ausführen müssen, können die JRE statt des vollen JDK installieren.
Was ist die Java Virtual Machine (JVM)?
Die JVM ist die Engine, die Java-Bytecode interpretiert oder just-in-time in nativen Maschinencode kompiliert. Sie ist der Kern der Java-Plattform und bietet plattformunabhängige Ausführung, Speicherverwaltung und Sicherheit.
Warum das JDK verwenden?
- Enthält Compiler, Debugger und Launcher, die zum Bauen von Java-Anwendungen nötig sind.
- Ermöglicht Entwicklern, Bytecode zu erzeugen, der auf jeder JVM läuft.
- Bietet Tools für Performance-Tuning, Code-Analyse und Dokumentation.
Warum die JRE verwenden?
- Bietet eine sofort einsatzbereite Umgebung zum Ausführen von Java-Anwendungen ohne Overhead von Entwicklungstools.
- Enthält den vollständigen Satz an Kernbibliotheken, die die meisten Java-Programme benötigen.
- Ideal für Endnutzer, die nur Java-Software ausführen, nicht entwickeln müssen.
Warum die JVM verwenden?
- Führt Java-Bytecode auf jeder Plattform mit kompatibler JVM aus – verwirklicht Javas „Write once, run anywhere“-Versprechen.
- Verfügt über einen Just-In-Time (JIT) Compiler, der die Performance zur Laufzeit optimiert.
- Handhabt Speicherallokation, Garbage Collection und Sicherheitsprüfungen.
Hauptmerkmale des JDK
- Vollständige Suite von Entwicklungstools: Compiler, Debugger, JavaDoc und mehr.
- Unterstützt moderne Sprachfeatures wie den Diamant-Operator (
<>) für Generics. - Cross-Plattform: Installation auf Windows, macOS, Linux oder Solaris.
- Enthält alle Komponenten der JRE, ist also ein Superset.
Hauptmerkmale der JRE
- Enthält die JVM und Kernklassenbibliotheken, die zum Ausführen von Java-Anwendungen nötig sind.
- Bietet Deployment-Technologien wie Java Web Start und das Java Plug-in.
- Enthält Networking- und Datenbank-APIs wie JDBC, RMI und JNDI.
- Schließt Entwicklungstools aus, hält das Paket schlank.
Hauptmerkmale der JVM
- Interpretiert Bytecode oder kompiliert ihn mit JIT für effiziente Ausführung.
- Verwaltet Speicher, Garbage Collection und Sicherheitsrichtlinien.
- Bietet flexible Architektur: Class Loader, Method Area, Heap, Stacks.
- Hardware-agnostisch: derselbe Bytecode läuft auf jeder Plattform mit kompatibler JVM.
Wie das JDK funktioniert
Das JDK integriert die JRE und fügt Entwicklungstools hinzu. Entwickler schreiben Code, javac kompiliert ihn zu Bytecode, und der Java Launcher (java) startet die JVM zur Programmausführung.
Wie die JRE funktioniert
Die JRE enthält die JVM, Class Loader und Laufzeitbibliotheken. Beim Programmstart lädt die JVM Klassen, verifiziert Bytecode und führt ihn via Interpreter oder JIT-Compiler aus.
Wie die JVM funktioniert
Die Kernkomponenten der JVM umfassen:
- Class Loader: Lädt, linkt und initialisiert Klassendateien.
- Method Area: Speichert Klassenstrukturen, statische Variablen und Methoden-Bytecode.
- Heap: Hält Objekte und Arrays, die über Threads geteilt werden.
- Java Stacks: Speichert lokale Variablen und Methodenframes für jeden Thread.
- PC Registers: Verfolgt die aktuelle Instruktion für jeden Thread.
- Execution Engine: Führt Bytecode aus, nutzt JIT für Hotspots.
- Native Method Interface & Libraries: Ermöglicht Integration mit nativem Code.
Vergleich von JDK, JRE und JVM
| Komponente | Vollständiger Name | Zweck | Plattformabhängigkeit | Enthaltene Tools |
|---|---|---|---|---|
| JDK | Java Development Kit | Vollständige Entwicklungsumgebung für Java-Anwendungen. | Plattformabhängig | Compiler, Debugger, JavaDoc, u.v.m. |
| JRE | Java Runtime Environment | Führt Java-Anwendungen aus, indem es Kernbibliotheken und die JVM bereitstellt. | Plattformabhängig | Keine (nur Laufzeit) |
| JVM | Java Virtual Machine | Führt Java-Bytecode aus; bietet plattformunabhängige Laufzeit. | Plattformabhängig (Implementierung variiert) | Keine (nur Ausführungsengine) |
Java
- Java verstehen: JDK, JRE und JVM erklärt
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java 10: Vereinheitlichtes JDK-Repository (JEP 296) – Single Source Repo
- Java 10: Thread-Local Handshakes (JEP 312) – Schnellere VM-Safepoints
- Java Logging Best Practices: Effizientes Log-Management für zuverlässigen Code