Was ist der Unterschied zwischen JVM, JDK, JRE und OpenJDK?

Antworten:

375

JVM

Die Java Virtual Machine (JVM) ist die virtuelle Maschine, auf der die Java-Bytecodes ausgeführt werden. Die JVM versteht den Java-Quellcode nicht. Aus diesem Grund müssen Sie Ihre *.javaDateien kompilieren , um Dateien zu erhalten *.class, die die von der JVM verstandenen Bytecodes enthalten. Es ist auch die Entität, die es Java ermöglicht, eine "portable Sprache" zu sein ( einmal schreiben, überall ausführen ). In der Tat gibt es spezifische Implementierungen der JVM für verschiedene Systeme (Windows, Linux, MacOS, siehe Wikipedia-Liste ). Ziel ist es, dass alle mit denselben Bytecodes dieselben Ergebnisse liefern.

JDK und JRE

Um den Unterschied zwischen JDK und JRE zu erklären, lesen Sie am besten die Oracle-Dokumentation und konsultieren Sie das Diagramm:

Java Runtime Environment (JRE)

Die Java Runtime Environment (JRE) bietet die Bibliotheken, die Java Virtual Machine und andere Komponenten zum Ausführen von Applets und Anwendungen, die in der Programmiersprache Java geschrieben sind. Darüber hinaus sind zwei wichtige Bereitstellungstechnologien Teil des JRE: Java-Plug-in, mit dem Applets in gängigen Browsern ausgeführt werden können; und Java Web Start, das eigenständige Anwendungen über ein Netzwerk bereitstellt. Es ist auch die Grundlage für die Technologien der Java 2-Plattform Enterprise Edition (J2EE) für die Entwicklung und Bereitstellung von Unternehmenssoftware. Die JRE enthält keine Tools und Dienstprogramme wie Compiler oder Debugger zum Entwickeln von Applets und Anwendungen.

Java Development Kit (JDK)

Das JDK ist eine Obermenge der JRE und enthält alles, was in der JRE enthalten ist, sowie Tools wie die Compiler und Debugger, die für die Entwicklung von Applets und Anwendungen erforderlich sind.

Beachten Sie, dass Oracle nicht das einzige Unternehmen ist, das JDKs bereitstellt.

OpenJDK

OpenJDK ist eine Open-Source-Implementierung des JDK und die Basis für das Oracle JDK. Es gibt fast keinen Unterschied zwischen dem Oracle JDK und dem OpenJDK.

Die Unterschiede sind in diesem Blog angegeben :

F: Was ist der Unterschied zwischen dem im OpenJDK-Repository gefundenen Quellcode und dem Code, den Sie zum Erstellen des Oracle JDK verwenden?

A: Es ist sehr eng - unser Erstellungsprozess für Oracle JDK-Versionen baut auf OpenJDK 7 auf, indem nur ein paar Teile hinzugefügt werden, wie der Bereitstellungscode, der die Implementierung des Java-Plugins und von Java WebStart durch Oracle sowie einige Closed-Source-Dritte umfasst Party-Komponenten wie ein Grafik-Rasterizer, einige Open-Source-Komponenten von Drittanbietern wie Rhino und hier und da ein paar Kleinigkeiten wie zusätzliche Dokumentation oder Schriftarten von Drittanbietern. In Zukunft ist es unsere Absicht, alle Teile des Oracle JDK mit Ausnahme derjenigen, die wir als kommerzielle Funktionen wie JRockit Mission Control (noch nicht in Oracle JDK verfügbar) betrachten, als Open Source zu nutzen und belastete Komponenten von Drittanbietern durch Open Source-Alternativen zu ersetzen, um eine engere Parität zu erreichen zwischen den Codebasen.

Update für JDK 11 - Ein Artikel von Donald Smith versucht, den Unterschied zwischen Oracle JDK und OpenJDK von Oracle zu unterscheiden: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- und später

alain.janinm
quelle
@ alain.janinm, würden Sie also OracleJDK oder OpenJDK für Ihre Entwicklung wählen?
Pacerier
@Pacerier Ich bin es gewohnt, OracleJDK bei der Arbeit zu verwenden, aber ich habe nichts gegen OpenJDK :) Eigentlich bin ich nie auf einen konkreten Unterschied gestoßen, der mich dazu bringt, zwischen ihnen zu wählen. Wenn Sie Open Source bevorzugen und keine proprietäre Lizenz benötigen, wählen Sie OpenJDK.
Alain.janinm
1
Bitte sagen Sie mir, wenn ich in folgenden Punkten Recht habe: Grundsätzlich kann keine echte Java-Anwendung ohne die JRE ausgeführt werden. Also enthalten alle Downloads (vielleicht mit Ausnahme einiger exotischer Dinge für Entwickler) sowohl JVM als auch JRE (wenn nicht das Superset-JDK)?
Mads Skjern
8
@MadsSkjern Ja, Sie benötigen eine JRE, um die Java-App auszuführen. Wenn Sie jedoch eine Java-App herunterladen, die nicht mit der JRE geliefert wird, wird erwartet, dass Sie eine auf Ihrem Computer installiert haben.
Alain.janinm
92

JVM ist die Java Virtual Machine - sie führt tatsächlich Java ByteCode aus.

JRE ist die Java-Laufzeitumgebung - sie enthält unter anderem eine JVM und ist das, was Sie zum Ausführen eines Java-Programms benötigen.

JDK ist das Java Development Kit - es ist das JRE, aber mit Javac (das ist, was Sie zum Kompilieren von Java-Quellcode benötigen) und anderen hinzugefügten Programmiertools.

OpenJDK ist eine spezifische JDK-Implementierung.

hvgotcodes
quelle
3
Wahrscheinlich, weil Sie das other thingsin einer JVM enthaltene nicht erwähnt haben . Was sind Sie ? Beantwortet dieser Artikel diese Frage vollständig - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad
OpenJDK enthält JVM, eine der Implementierungen der JVM-Spezifikation. Oracle JDK enthält eine weitere Implementierung der JVM-Spezifikation
AKh
46

JDK (Java Development Kit)

Das Java Developer Kit enthält Tools, die zum Entwickeln der Java-Programme und JRE zum Ausführen der Programme erforderlich sind. Die Tools umfassen Compiler (javac.exe), Java Application Launcher (java.exe), Appletviewer usw.

Der Compiler konvertiert Java-Code in Byte-Code. Der Java Application Launcher öffnet eine JRE, lädt die Klasse und ruft ihre Hauptmethode auf.

Sie benötigen JDK, wenn Sie überhaupt Ihre eigenen Programme schreiben und kompilieren möchten. Für die Ausführung von Java-Programmen ist JRE ausreichend.

JRE ist für die Ausführung von Java-Dateien vorgesehen

dh JRE = JVM + Java-Paketklassen (wie util, math, lang, awt, Swing usw.) + Laufzeitbibliotheken.

JDK ist hauptsächlich für die Java-Entwicklung gedacht. Dh Sie können eine Java-Datei (mit Hilfe von Java-Paketen) erstellen, eine Java-Datei kompilieren und eine Java-Datei ausführen.

JRE (Java Runtime Environment)

Die Java-Laufzeitumgebung enthält JVM, Klassenbibliotheken und andere unterstützende Dateien. Es enthält keine Entwicklungstools wie Compiler, Debugger usw. Tatsächlich führt JVM das Programm aus und verwendet die Klassenbibliotheken und andere in JRE bereitgestellte unterstützende Dateien. Wenn Sie ein Java-Programm ausführen möchten, muss JRE auf dem System installiert sein

Die Java Virtual Machine bietet eine plattformunabhängige Möglichkeit zur Ausführung von Code. Das bedeutet, einmal in jedem Computer zu kompilieren und an jedem Ort (jedem Computer) auszuführen.

JVM (Java Virtual Machine)

Wie wir alle wissen, ist die Ausgabe beim Kompilieren einer Java-Datei keine 'exe', sondern eine '.class'-Datei. Die '.class'-Datei besteht aus Java-Bytecodes, die für JVM verständlich sind. Java Virtual Machine interpretiert den Bytecode abhängig von der zugrunde liegenden Kombination aus Betriebssystem und Hardware in den Maschinencode. Es ist für alle Dinge wie Garbage Collection, Überprüfung der Array-Grenzen usw. verantwortlich. JVM ist plattformabhängig.

Die JVM wird als "virtuell" bezeichnet, da sie eine Maschinenschnittstelle bietet, die nicht vom zugrunde liegenden Betriebssystem und der Maschinenhardwarearchitektur abhängt. Diese Unabhängigkeit von Hardware und Betriebssystem ist ein Eckpfeiler des Wertes von Java-Programmen, die einmal ausgeführt werden können.

Es gibt verschiedene JVM-Implementierungen. Diese können sich in Bezug auf Leistung, Zuverlässigkeit, Geschwindigkeit usw. unterscheiden. Diese Implementierungen unterscheiden sich in den Bereichen, in denen in der Java-Spezifikation nicht erwähnt wird, wie die Funktionen implementiert werden sollen, z. B. in Bezug auf die Funktionsweise des Garbage Collection-Prozesses Definieren Sie einen bestimmten Weg, um dies zu tun.

user25226
quelle
23

Eine Java Virtual Machine (JVM) ist eine virtuelle Maschine, die Java ByteCode ausführen kann. Es ist die Code-Ausführungskomponente der Java-Softwareplattform.

Das Java Development Kit (JDK) ist ein Produkt der Oracle Corporation für Java-Entwickler. Seit der Einführung von Java ist es das mit Abstand am häufigsten verwendete Java Software Development Kit (SDK).

Java Runtime Environment wird auch als Java Runtime, Runtime Environment bezeichnet

OpenJDK (Open Java Development Kit) ist eine kostenlose Open Source-Implementierung der Programmiersprache Java. Dies ist das Ergebnis einer Anstrengung, die Sun Microsystems im Jahr 2006 begonnen hat. Die Implementierung ist mit einer Linking-Ausnahme unter der GNU General Public License (GPL) lizenziert.

Nidhin
quelle
Gute Antwort, aber eine Klarstellung. Andere als Oracle produzieren JDKs - zum Beispiel IBM für AIX und z / OS, HP für HP-UX usw.
Trent Gray-Donald
16

JVM ist die virtuelle Maschine, auf der Java-Code ausgeführt wird

JRE ist die Umgebung (Standardbibliotheken und JVM), die zum Ausführen von Java-Anwendungen erforderlich ist

JDK ist die JRE mit Entwicklertools und Dokumentationen

OpenJDK ist eine Open-Source-Version des JDK, im Gegensatz zum üblichen JDK von Oracle

Garrett Hall
quelle
15

JDK (Java Development Kit):

  • enthält Tools, die zum Entwickeln der Java-Programme benötigt werden.
  • Sie benötigen JDK, wenn Sie überhaupt Ihre eigenen Programme schreiben und kompilieren möchten.
  • JDK ist hauptsächlich für die Java-Entwicklung gedacht.

JRE (Java Runtime Environment)

Die Java-Laufzeitumgebung enthält JVM, Klassenbibliotheken und andere unterstützende Dateien. JRE ist für die Ausführung von Java-Dateien vorgesehen.

JVM (Java Virtual Machine)

Die JVM interpretiert den Bytecode abhängig von der zugrunde liegenden Kombination aus Betriebssystem und Hardware in den Maschinencode . Es ist für alle Dinge wie Garbage Collection, Überprüfung der Array-Grenzen usw. verantwortlich. Java Virtual Machine bietet eine plattformunabhängige Möglichkeit zur Ausführung von Code.

EIN CHEF
quelle
6

JDK - Kompiliert Java in ByteCode. Besteht aus Debuggern, Compilern usw.

javac file.java // Is executed using JDK

JVM - Führt den Bytecode aus. JVM ist diejenige, die die Java-Plattform unabhängig macht. JVM variiert jedoch für Plattformen.

JRE - JVM zusammen mit Java-Laufzeitbibliotheken zum Ausführen von Java-Programmen.

Bharanitharan
quelle
4

Ein weiterer erwähnenswerter Aspekt:

JDK (Java Development Kit)

Sie benötigen es für Entwicklungszwecke, wie der Name schon sagt.

Beispiel: Ein Softwareunternehmen muss JDK auf seinem Computer installieren, da es neue Software entwickeln muss, die auch das Kompilieren und Ausführen seiner Java-Programme umfasst.

Wir können also sagen, dass JDK = JRE + JVM.

JRE (Java-Laufzeitumgebung)

Es wird benötigt, um Java-Programme auszuführen. Sie können damit keine Java-Programme kompilieren.

Beispiel: Ein normaler Computerbenutzer, der einige Online-Spiele ausführen möchte, benötigt JRE in seinem System, um Java-Programme auszuführen.

JVM (Java Virtual Machine)

Wie Sie vielleicht wissen, führen Sie die Bytecodes aus. Es macht die Java-Plattform unabhängig, da es die .classDatei ausführt , die Sie nach dem Kompilieren des Java-Programms erhalten, unabhängig davon, ob Sie es unter Windows, Mac oder Linux kompilieren.

Öffnen Sie JDK

Nun, wie ich oben sagte. Jetzt wird JDK von verschiedenen Unternehmen hergestellt. Eines davon ist Open Source und kostenlos für die öffentliche Nutzung. Es ist OpenJDK, während einige andere das JRockit JDK oder das IBM JDK der Oracle Corporation sind.

Für den allgemeinen Benutzer können sie jedoch alle gleich erscheinen.

Fazit

Wenn Sie ein Java-Programmierer sind, benötigen Sie JDK in Ihrem System und dieses Paket enthält auch JRE und JVM. Wenn Sie jedoch ein normaler Benutzer sind, der gerne Online-Spiele spielt, benötigen Sie nur JRE und dieses Paket enthält kein JDK .

Mit anderen Worten, JDK ist Großvater JRE ist Vater und JVM ist ihr Sohn.

Mrinal
quelle
9
Ihr Beitrag ist überall falsch. JRE (Laufzeitumgebung) enthält die JVM (virtuelle Maschine) und die Java-Klassenbibliothek. JDK enthält JRE und eine Reihe von Programmiertools für Entwickler. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Antworte auf meinen Kommentar, wenn du ihn reparierst und ich werde die Downvote entfernen.
nhahtdh
@nhahtdh können wir sagen: jdk ist ein unabhängiges Paket, kann heruntergeladen und separat installiert werden. Jre = einige Klassen + Java Plugin + JVM
Prakash Pandey
3

Java ist die Sprache und enthält eine strenge und stark typisierte Syntax, mit der Sie inzwischen sehr vertraut sein sollten.

Java 2 Platform, Standard Edition, auch als J2SE bekannt, verwies auf die Plattform und enthielt unter anderem die Klassen in den Paketen java.lang und java.io. Es war der Baustein, auf dem Java-Anwendungen aufgebaut waren.

Eine Java Virtual Machine (JVM) ist eine virtuelle Software-Maschine, auf der kompilierter Java-Code ausgeführt wird. Da kompilierter Java-Code lediglich Bytecode ist, ist die JVM dafür verantwortlich, diesen Bytecode vor dem Ausführen in Maschinencode zu kompilieren. (Dies wird häufig als Just In Time Compiler oder JIT Compiler bezeichnet.) Die JVM kümmert sich auch um die Speicherverwaltung, sodass der Anwendungscode nicht erforderlich ist.

Das Java Development Kit (JDK) war und ist die Software, mit der Java-Entwickler Java-Anwendungen erstellen. Es enthält einen Java-Sprachcompiler, einen Dokumentationsgenerator, Tools zum Arbeiten mit nativem Code und (normalerweise) den Java-Quellcode für die Plattform, um das Debuggen von Plattformklassen zu ermöglichen.

Die Java Runtime Environment (JRE) war und ist die Software, die Endbenutzer herunterladen, um kompilierte Java-Anwendungen auszuführen. Es enthält eine JVM, enthält jedoch keine der im JDK enthaltenen Entwicklungstools. Das JDK enthält jedoch eine JRE.

Koray Tugay
quelle
3

JVM: Eine Spezifikation, die die Art und Weise / die Ressourcen zum Ausführen eines Java-Programms beschreibt. Führt den Bytecode tatsächlich aus und macht die Java-Plattform unabhängig. Dabei ist es für verschiedene Plattformen unterschiedlich. JVM für Windows kann nicht als JVM für UNIX funktionieren.

JRE: Implementierung von JVM. (JVM + Laufzeitbibliotheken)

JDK: JRE + Java-Compiler und andere wichtige Tools zum Erstellen eines Java-Programms von Grund auf neu

user2807418
quelle
2

JVM : Dies bedeutet tatsächlich, dass der Bytecode-Interpreter plattformabhängig ist. Zum Beispiel: In der Windows-Plattform ist der Prozess ' java.exe ' oder ' javaw.exe ' der jvm-Prozess.

JDK : ist ein Toolkit, das die erforderlichen Bibliotheken und Dienstprogramme zum Entwickeln und Ausführen von Java-Programmen / -Anwendungen enthält

JRE : ist die Ausführungsumgebung für eine Java-Anwendung. Sie unterstützt nur Laufzeitabhängigkeiten, einschließlich JVM für kompilierte Programme. Wenn wir ein Java-Programm kompilieren wollen, brauchen wir jdk.

Tom Sebastian
quelle
2

JVM: Virtuelle Maschine von Java. teilt der Maschine mit, was mit dem Java-Code zu tun ist. Sie können JVM nicht so herunterladen, wie es ist. Es wird in einer anderen Komponente geliefert.

JRE: Eine andere Komponente, auf die oben Bezug genommen wurde, ist die JRE. Es ist JVM + andere Jars, um eine Laufzeitumgebung zu erstellen

JDK: enthält JRE (das wiederum JVM enthält). Sobald Sie JDK erhalten haben, müssen Sie JRE und JVM nicht separat installieren. Es enthält einen Compiler, der Ihre .java-Dateien zu .class-Dateien kompiliert

Jain
quelle
2

JVM

JVM (Java Virtual Machine) ist eine abstrakte Maschine. Diese Spezifikation bietet eine Laufzeitumgebung, in der Java-Bytecode ausgeführt werden kann. JVMs sind für viele Hardware- und Softwareplattformen verfügbar.

JRE

JRE ist eine Abkürzung für Java Runtime Environment. Es wird zur Bereitstellung der Laufzeitumgebung verwendet. Es ist die Implementierung von JVM. Es ist physisch vorhanden. Es enthält eine Reihe von Bibliotheken und andere Dateien, die JVM zur Laufzeit verwendet.

JDK

JDK ist eine Abkürzung für Java Development Kit. Es existiert physisch. Es enthält JRE + -Entwicklungswerkzeuge.

Link: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm

Nikhil Kumar
quelle
1

Zusammenfassend:

  • JRE = JVM + Java-Pakete (wie util, math, lang, awt, Swing usw.) + Laufzeitbibliotheken
  • JDK = JRE + Entwicklungs- / Debugging-Tools

Wenn Sie in Java entwickeln möchten, benötigen Sie das JDK. Wenn Sie jedoch nur Java ausführen möchten, benötigen Sie das JRE.

Hugo Valenza M.
quelle
0

JVM Java Virtual Machine führt tatsächlich den Java-Bytecode aus. Es ist der Ausführungsblock auf der JAVA-Plattform. Es konvertiert den Bytecode in den Maschinencode.

Die JRE Java Runtime Environment bietet die Mindestanforderungen für die Ausführung einer Java-Anwendung. Es besteht aus der Java Virtual Machine (JVM), Kernklassen und unterstützenden Dateien.

Das JDK Java Development Kit enthält alle Tools zum Entwickeln Ihrer Anwendungssoftware. Es ist als JRE + JVM

Open JDK ist eine kostenlose Open Source-Implementierung der Java-Plattform.

Ankur Anandapu
quelle
0

In Laienbegriffen: - JDK = JRE + Entwicklungs- / Debugging-Tools , bei denen JDK unser komplettes Paket für die Arbeit mit Java ist, vom Erstellen des Kompilierens bis zum Ausführen. Andererseits besteht JRE nur aus dem Ausführen von Code (Byte-Code).

Hinweis: - Unabhängig davon, ob wir JDK oder JRE installieren, wird JVM mit beiden Paketen gebündelt, und JVM ist der Teil, in dem der JIT-Compiler den Bytecode in den maschinenspezifischen Code konvertiert.

Lesen Sie einfach den Artikel über JDK, JRE, JVM und JIT

Hochbetrieb im August
quelle
0

JDK : Das vollständige Paket, das Sie zum Schreiben und Ausführen von Java-Code benötigen

OpenJDK : Eine unabhängige Implementierung von JDK, um es viel besser zu machen

JVM : Konvertiert Java-Code in Bytecode und enthält die Spezifikationen, die angeben, wie ein Java-Code kompiliert, geladen, überprüft, auf Fehler überprüft und ausgeführt werden soll.

JRE : Implementierung der JVM, mit der einige Java-Bibliotheken zum Ausführen des Programms verwendet werden

Dhirwan
quelle
0

JRE führt die Anwendung aus, aber JVM liest die Anweisungen Zeile für Zeile, sodass sie interpretiert werden.

JDK = JRE + Entwicklungstools

JRE = JVM + Bibliotheksklassen

KIBOU Hassan
quelle
0

JVM wird als Java Virtual Machine abgekürzt. JVM ist die Hauptkomponente der Java-Architektur. JVM ist in der Programmiersprache C geschrieben. Der Java-Compiler erzeugt den Bytecode für JVM. JVM liest den Bytecode, überprüft den Bytecode und verknüpft den Code mit der Bibliothek.

JRE wird als Java Runtime Environment abgekürzt . Es wird zur Laufzeit eine Umgebung bereitgestellt. Es ist physisch vorhanden. Es enthält JVM + eine Reihe von Bibliotheken (jar) + andere Dateien.

JDK wird als Java Development Kit abgekürzt . Es ist Java-Anwendungen zu entwickeln. Und auch das Debuggen und Überwachen von Java-Anwendungen. JDK enthält JRE + -Entwicklungswerkzeuge (javac, java)

OpenJDK OpenJDK ist eine Open Source-Version von Sun JDK. Oracle JDK ist das offizielle JDK von Sun.

Poorna Senani Gamage
quelle