JVM vs. JRE vs. JDK: Worin liegt der Unterschied?

Ingenieur schreibt an eine Wand vor Teammitgliedern

Java ist eine der beliebtesten Programmiersprachen, die heute in Entwicklungsumgebungen verwendet werden. Es wird hauptsächlich für Backend-Entwicklungsprojekte, Spieleentwicklung sowie Desktop- und Mobilcomputing verwendet. Lesen Sie weiter und finden Sie heraus, wie Java Virtual Machine (JVM), Java Runtime Environment (JRE) und Java Development Kit (JDK) jeweils eine Rolle im Java-Entwicklungsprozess spielen. Sie werden auch etwas über ihre Beziehung zueinander erfahren, sowie über die Unterschiede, die sie auszeichnen.

Was ist Java Virtual Machine (JVM)?

Java Virtual Machine, oder JVM, lädt, verfiziert und führt Java-Bytecode aus. Es wird als Interpreter oder Kern der Java-Programmiersprache bezeichnet, weil er Java-Programme ausführt.

Die Rolle von JVM in Java

JVM ist für die Umwandlung von Bytecode in maschinenspezifischen Code zuständig und ist sowohl im JDK als auch im JRE erforderlich. Es ist außerdem plattformabhängig und erfüllt viele Funktionen, einschließlich Speicherverwaltung und Sicherheit. Darüber hinaus kann JVM Programme ausführen, die in anderen Programmiersprachen geschrieben sind, die in Java-Bytecode konvertiert wurden.

Java Native Interface (JNI) wird oft im Zusammenhang mit JVM genannt. JNI ist ein Programmier-Framework, das es Java-Code, der in JVM ausgeführt wird, ermöglicht, mit Anwendungen zu kommunizieren (d. h. von ihnen aufzurufen und von diesen aufgerufen zu werden), die mit einer Hardware und einer bestimmten Betriebssystemplattform verbunden sind. Diese Anwendungen werden als native Anwendungen bezeichnet und können oft in anderen Sprachen geschrieben werden. Native Methoden werden verwendet, um nativen Code, der in anderen Sprachen geschrieben ist, in eine Java-Anwendung zu verschieben.

JVM-Komponenten

JVM besteht aus drei Hauptkomponenten bzw. Subsystemen:

  • Das Class Loader Subsystem ist für das Laden, Verknüpfen und Initialisieren einer Java-Klassendatei (d. h. „Java-Datei“) zuständig, auch bekannt als dynamisches Klassenladen.
  • Runtime Data Areas enthalten Methodenbereiche, PC-Register, Stack-Bereiche und Threads.
  • Die Execution Engine enthält einen Interpreter, einen Compiler und einen Garbage-Collection-Bereich.

Was ist Java Runtime Environment (JRE)?

Java Runtime Environment, oder JRE, ist eine Reihe von Software-Tools, die für die Ausführung des Java-Programms oder der Anwendung auf Ihrem System verantwortlich sind.

JRE verwendet Heapspeicher für die dynamische Speicherzuweisung für Java-Objekte. JRE wird auch in JDB (Java Debugging) verwendet.

Die Rolle von JRE in Java

Wenn ein Programmierer ein Java-Programm mit dem Java-Befehl ausführen möchte, sollte er JRE installieren. Wenn er nur installieren möchte (und keinen Code entwickeln oder kompilieren), ist nur JRE erforderlich.

JRE-Komponenten

Neben der Java Virtual Machine besteht JRE aus verschiedenen anderen unterstützenden Softwaretools und Funktionen, mit denen Sie das Beste aus Ihren Java-Anwendungen als virtuelle Maschinen herausholen können.

  • Bereitstellungslösungen: Im Rahmen der JRE-Installation sind Bereitstellungstechnologien wie Java Web Start und Java Plug-in enthalten, die die Aktivierung von Anwendungen vereinfachen und advanced support für zukünftige Java-Updates bieten.
  • Entwicklungs-Toolkits: JRE enthält auch Toolkits, die Entwicklern helfen sollen, ihre Benutzeroberfläche zu verbessern. Diese Aufgaben umfassen unter anderem:
    • Java 2D: Eine Anwendungsprogrammierschnittstelle (API) zur Darstellung zweidimensionaler Grafiken in der Programmiersprache Java. Entwickler können umfangreiche Benutzeroberflächen, Spezialeffekte, Spiele und Animationen erstellen.
    • Abstract Window Toolkit (AWT): Eine grafische Benutzeroberfläche (GUI), die verwendet wird, um Objekte, Schaltflächen, Bildlaufleisten und Fenster zu erstellen.
    • Swing: Eine weitere leichtgewichtige GUI, die eine Vielzahl von Widgets verwendet, um flexible, benutzerfreundliche Anpassungen zu ermöglichen.
  • Integrationsbibliotheken: Java Runtime Environment bietet mehrere Integrations- und Klassenbibliotheken, die Entwickler bei der Erstellung nahtloser Datenverbindungen zwischen ihren Anwendungen und Dienstleistungen unterstützen. Einige dieser Bibliotheken umfassen Folgendes:
    • Java IDL: Verwendet die Common Object Request Brokerage Architecture (CORBA), um verteilte Objekte zu unterstützen, die in der Programmiersprache Java geschrieben sind.
    • Java Database Connectivity (JDBC) API: Bietet Tools für Entwickler zum Schreiben von Anwendungen mit Zugriff auf Remote-Beziehungsdatenbanken, Unstrukturierte Dateien und Tabellenkalkulationen.
    • Java Naming and Directory Interface (JNDI): Ein Programmierschnittstellen- und Verzeichnisdienst, mit dem Kunden portable Anwendungen erstellen können, die mithilfe von Namenskonventionen Informationen aus Datenbanken abrufen können.
  • Sprach- und Dienstprogramm-Bibliotheken: In JRE sind Java.lang. und Java.util. enthalten – Pakete, die für das Design von Java-Anwendungen, die Paketversionierung, die Verwaltung und die Überwachung von grundlegender Bedeutung sind. Einige dieser Pakete umfassen unter anderem:
    • Collections Framework: Eine einheitliche Architektur, die aus einer Sammlung von Schnittstellen besteht, die Speicherung und Verarbeitung von Anwendungsdaten verbessern sollen.
    • Concurrency Utilities: Ein leistungsstarkes Framework-Paket mit leistungsstarken Threading-Dienstprogrammen.
    • Preferences API: Eine einfache, plattformübergreifende, persistente API, die es mehreren Benutzern auf demselben Computer ermöglicht, ihre eigene Gruppe von Anwendungseinstellungen zu definieren.
    • Logging: Erstellt Protokollberichte – z. B. Sicherheitsfehler, Konfigurationsfehler und Leistungsprobleme – zur weiteren Analyse.
    • Java Archive (JAR): Ein plattformunabhängiges Dateiformat, das es ermöglicht, mehrere Dateien im JAR-Dateiformat zu bündeln, wodurch die Download-Geschwindigkeit erheblich verbessert und die Dateigröße reduziert wird.

Was ist das Java Development Kit (JDK)?

Java Development Kit (JDK) ist ein Software-Development-Kit, das eine Obermenge von JRE darstellt. Es ist die grundlegende Komponente, die Entwicklung von Java-Anwendungen und Java-Applets ermöglicht. Es ist plattformspezifisch, sodass für jedes Betriebssystem (z. B. Mac, Unix und Windows) separate Installationsprogramme erforderlich sind.

Die Rolle von JDK in Java

JDK enthält alle Tools, die zum Kompilieren, Debuggen und Ausführen eines mit der Java-Plattform entwickelten Programms erforderlich sind. (Es ist erwähnenswert, dass Java-Programme auch über die Befehlszeile ausgeführt werden können.)

JDK-Komponenten

Das JDK enthält alle Java-Tools, ausführbaren Dateien und Binärdateien, die zum Ausführen von Java-Programmen erforderlich sind. Dazu gehören JRE, ein Compiler, ein Debugger, ein Archiver und andere Tools, die bei der Java-Entwicklung verwendet werden.

Java SE vs. Java EE

Java ist ein Synonym für Java Standard Edition (Java SE) oder Core Java. Alle drei Euphemismen beziehen sich auf die grundlegende Java-Spezifikation, die Definition von Typen und Objekten beinhaltet. Java EE hingegen stellt APIs bereit und wird in der Regel zur Ausführung größerer Anwendungen verwendet. Der Inhalt dieses Blogs konzentriert sich auf Java SE.

Wie JVM, JRE und JDK zusammenarbeiten

Schauen wir uns zunächst an, wie die drei Kernkomponenten von Java zusammenarbeiten, und untersuchen dann die Unterschiede. Das folgende Diagramm zeigt, wie JVM, JRE und JDK in der Java-Umgebung zusammenhängen.

Wenn Sie sich einen aufgeschnittenen Baseball vorstellen, enthält er drei Hauptkomponenten: den runden, gefüllten Kern, den Mittelteil aus Woll- und Baumwolle sowie die Oberfläche aus Rindsleder. Ein Ball ohne alle drei Schichten wird seine beabsichtigte Funktion nicht erfüllen. Ähnlich wie die drei grundlegenden Teile eines Puzzles haben JVM, JRE und JDK alle spezifische Funktionen. Ohne alle drei wird Java nicht erfolgreich arbeiten.

Vergleich von JVM, JRE und JDK

Im folgenden Video erklärt Jamil Spain weiter, wie JRE und JDK zusammenhängen:

JDK vs. JRE vs. JVM: Die wichtigsten Unterschiede

Und nun zu den Unterschieden:

  • JDK ist die Entwicklungsplattform, während JRE für die Ausführung zuständig ist.
  • JVM ist die Grundlage bzw. das Herzstück der Programmiersprache Java und stellt sicher, dass der Java-Quellcode des Programms plattformunabhängig ist.
  • JVM ist sowohl im JDK als auch in JRE enthalten – Java-Programme können ohne sie nicht laufen.

Komplementäre Technologien

Es gibt viele ergänzende Technologien, die zur Verbesserung von JVM, JRE oder JDK verwendet werden können. Die folgenden Technologien gehören zu den am häufigsten verwendeten:

  • Just-in-Time Compiler (JIT) ist Teil von JVM und optimiert die Umwandlung von Bytecode in Maschinencode. Es wählt ähnliche Bytecodes aus, die gleichzeitig kompiliert werden sollen, wodurch die Gesamtdauer des Bytecodes für die Maschinencode-Kompilierung verkürzt wird.
  • Javac, ein weiteres ergänzendes Tool, ist ein Compiler, der Java-Definitionen liest und in Bytecode umwandelt, der auf JVM ausgeführt werden kann.
  • Javadoc konvertiert API-Dokumentation von Java-Quellcode in HTML. Dies ist nützlich, wenn Sie eine Standarddokumentation in HTML erstellen.

JVM und Container-Technologie

Java Virtual Machine (JVM) wird verwendet, um – Sie haben es erraten – virtuelle Maschinen (VMs) zu erstellen. VMs sind Server, auf denen mehrere Anwendungen auf der gleichen zugrunde liegenden physischen Hardware ausgeführt werden können, ohne sich gegenseitig zu beeinträchtigen. Dies ermöglicht eine bessere Nutzung der Ressourcen und macht sie viel einfacher und kostengünstiger zu skalieren als herkömmliche Infrastrukturen. Aufgrund ihrer Unabhängigkeit können VMs außerdem leicht entsorgt werden: Wenn Sie die Anwendung nicht mehr benötigen, fahren Sie die VM einfach herunter.

Container bringen diese Abstraktion auf die nächste Ebene und virtualisieren den Betriebssystemkernel. Durch das Fehlen des Betriebssystems sind Container noch schlanker, schneller und flexibler als VMs.

Java, JVM, JDK, JDK und IBM®

Für viele Unternehmen bleibt Java ein wichtiger Bestandteil der Anwendungsentwicklung und bietet eine solide Grundlage für die Erstellung portabler und skalierbarer Lösungen. Es kann ebenfalls eine Schlüsselrolle bei der Modernisierung von Anwendungen auf dem Weg in die Cloud spielen.

Machen Sie den nächsten Schritt und erkunden Sie OpenJDK und IBM Runtimes for Business, die zuverlässigen und kostengünstigen kommerziellen Support für die Implementierung, Überwachung und Verwaltung von Java-Anwendungen bieten.