Menü

Freitag, 21. Februar 2014

Was ist der Unterschied zwischen JVM, JRE und JDK?

Beim Einstieg in die Java-Entwicklung wird man oft mit den Begriffen JVMJRE und JDK konfrontiert. In diesem Artikel möchte ich diese Begriffe genauer erklären.


JVM (Java Virtual Machine)

Die JVM ist Teil der JRE (Java Runtime Environment) und hat die Aufgabe den plattformunabhängigen Bytecode plattformabhängig auszuführen. Sie dient sozusagen als Schnittstelle zur Maschine und zum Betriebssystem.
Die Bytecode-Dateien (.class) werden von der JVM zur Laufzeit in die lokale Maschinensprache übersetzt. Für verschiedene Plattformen (Windows/Linux/Mac/...) gibt es unterschiedliche Implementierungen der JVM. Die verschiedenen Implementierungen kommunizieren mit verschiedenen Maschinen auf unterschiedlichen Wegen, bilden aber eine einheitliche virtuelle Umgebung.
Somit wird die Plattformunabhängigkeit erreicht, da das Java Programm nur mit der JVM kommunizieren muss.

Anmerkung:
Die JVM selbst ist nicht plattformunabhängig, da sie in plattformspezifischen Sprachen wie C und C++ geschrieben ist.

JRE (Java Runtime Environment)

Die JRE beinhaltet neben der (plattformspezifischen) JVM verschiedene Bibliotheken und Komponenten, die zur Ausführung von Java Programmen benötigt werden. Die JRE ist die Software, die auf der tatsächlichen Hardware läuft und mit dieser kommuniziert.

Anmerkung:
Die JRE enthält keine Entwicklungswerkzeuge wie z.B. einen Compiler. Ohne die JRE kann ein Java Programm nicht ausgeführt werden. Wenn man kein Entwickler ist und nur Java Programme ausführen möchte, benötigt man auch nur die JRE.

JDK (Java Development Kit)

Das JDK beinhaltet neben der JRE verschiedene Entwicklungswerkzeuge (javac, javadoc, jar, ...). Der Java-Compiler liest den Quellcode aus Dateien, die auf .java enden und schreibt den Bytecode in Dateien, die auf .class enden. Dabei enstprechen die Namen der Dateien dem Namen der zu übersetzenden Klasse (xxx.java -> xxx.class). Ist eine Klasse einem Java-Paket (package) zugeordnet, so wird das Paket auf einen passenden Verzeichnispfad abgebildet (xxx.java beinhaltet "package de.beispiel;" -> Pfad de/beispiel/xxx.class).
Der Java-Compiler ist in Java geschrieben und damit plattformunabhängig, d.h. der Bytecode des Compilers ist auf allen Plattformen identisch.

Beispiel

  1. Mit dem Java-Compiler (javac) vom JDK wird der Quellcode (xxx.java) in Bytecode (xxx.class) übersetzt.
  2. Der Java application launcher der JRE (java) startet das Programm auf der JVM,  die den Bytecode in Maschinencode umwandelt und auf dem Betriebssystem ausführt.

1 Kommentar:

  1. Sehr gut aber ich wurde auch bei der Definition von JRE (Java Runtime Environment) sagen JRE enthält Gruppen von Dateien, die von JVM zur Laufzeit benötigt werden.

    AntwortenLöschen