821 Stimmen

Unterschiede zwischen Oracle JDK und OpenJDK

HINWEIS: Diese Frage stammt aus dem Jahr 2014. Ab Java 11 nähern sich OpenJDK und Oracle JDK an.

Gibt es wichtige Unterschiede zwischen Oracle und OpenJDK?

Sind zum Beispiel die Garbage Collection und andere JVM-Parameter gleich?

Arbeitet die GC bei den beiden unterschiedlich?

427voto

Venkateswara Rao Punkte 4922

Sowohl OpenJDK als auch Oracle JDK werden derzeit nur von Oracle erstellt und gewartet.

OpenJDK und Oracle JDK sind Implementierungen der gleichen Java-Spezifikation, die den TCK (Java Technology Certification Kit) bestanden haben.

Die meisten Anbieter von JDK basieren auf OpenJDK, indem sie einige Anpassungen an [meistens an lizenzierten proprietären Teilen / ersetzen durch leistungsstärkere Elemente, die nur auf bestimmten Betriebssystemen funktionieren] vornehmen, ohne die TCK-Kompatibilität zu beeinträchtigen.

Viele Anbieter haben die Java-Spezifikation implementiert und den TCK bestanden. Beispielsweise IBM J9, Azul Zulu, Azul Zing und Oracle JDK.

Fast jedes existierende JDK leitet sich von OpenJDK ab.

Wie von vielen vorgeschlagen, ist die Lizenzierung ein Unterschied zwischen den JDKs.

Ab JDK 11 erfordert der Zugriff auf das langfristige Support-Oracle JDK/Java SE jetzt eine kommerzielle Lizenz. Achten Sie jetzt darauf, welches JDK Sie installieren, da das Oracle JDK ohne Abonnement möglicherweise nicht mehr funktioniert. Quelle

Quelle: _Liste der Java-Virtual-Maschinen_

346voto

radai Punkte 23341

Für Java 7 nichts Entscheidendes. Das OpenJDK-Projekt basiert größtenteils auf dem von Sun gespendeten HotSpot-Quellcode.

Zudem wurde OpenJDK ausgewählt, um die Referenzimplementierung für Java 7 zu sein und wird von Oracle-Ingenieuren gewartet.

Es gibt eine ausführlichere Antwort von 2012 zu Unterschieden zwischen JVM, JDK, JRE & OpenJDK, die auf einen Oracle-Blogbeitrag verweist:

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 nah - unser Build-Prozess für Oracle JDK-Versionen baut auf OpenJDK 7 auf, indem wir nur ein paar Teile hinzufügen, wie den Bereitstellungscode, der die Implementierung des Java-Plugins und Java WebStart von Oracle umfasst, sowie einige geschlossene Drittanbieterkomponenten wie einen Grafikrasterizer, einige Open-Source-Drittanbieterkomponenten wie Rhino und ein paar Bits und Stücke hier und da wie zusätzliche Dokumentation oder Schriftarten von Drittanbietern. In Zukunft beabsichtigen wir, alle Teile des Oracle JDK Open Source zu machen, außer denen, die wir als kommerzielle Funktionen betrachten, wie beispielsweise JRockit Mission Control (noch nicht im Oracle JDK verfügbar), und ersetzen belastete Drittanbieterkomponenten durch Open-Source-Alternativen, um eine engere Parität zwischen den Codebasen zu erreichen.

113voto

Ein wesentlicher Unterschied für die Zukunft ist der Veröffentlichungsplan und die Supportrichtlinie.

OpenJDK

OpenJDK wird alle 6 Monate eine Funktionsveröffentlichung haben, die nur bis zur nächsten Funktionsveröffentlichung unterstützt wird. Es handelt sich im Grunde um einen kontinuierlichen Strom von Veröffentlichungen, die sich an Entwickler richten.

Oracle JDK

Das Oracle JDK ist eher auf ein Unternehmenspublikum ausgerichtet, das Stabilität schätzt. Es basiert auf einer der OpenJDK-Veröffentlichungen, erhält dann aber langfristige Unterstützung (LTS). Das Oracle JDK plant alle 3 Jahre Veröffentlichungen.

Bildbeschreibung hier eingeben

Quelle: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events

48voto

45hook Punkte 581

Für Java 8 sind Oracle JDK vs. OpenJDK meine Ansichten zu den wichtigsten Unterschieden:

  • OpenJDK ist eine Open-Source-Implementierung der Java Standard Edition Plattform mit Beiträgen von Oracle und der offenen Java-Community.

  • OpenJDK wird unter der Lizenz GPL v2 veröffentlicht, während Oracle JDK unter dem Oracle Binary Code License Agreement lizenziert ist.

  • Tatsächlich baut der Build-Prozess von Oracle JDK aus dem OpenJDK-Quellcode. Daher gibt es keine wesentlichen technischen Unterschiede zwischen Oracle JDK und OpenJDK. Neben dem Basiscode enthält Oracle JDK die Java Plugin- und Java WebStart-Implementierung von Oracle. Außerdem enthält es drittanbietergeschlossene und freie Komponenten wie Grafikrasterisierung und Rhino.

  • Der Oracle JVM war Rockit und ab Java SE 7 wurden HotSpot und JRockit zu einer einzigen JVM zusammengeführt. Jetzt haben wir nur noch die zusammengeführte HotSpot JVM.

  • Es gibt Fälle, in denen Leute behaupten, dass sie Probleme mit OpenJDK hatten, die behoben wurden, als sie zu Oracle JDK wechselten.

  • Twitter hat seine eigene JDK.

  • Software wie Minecraft erwartet die Verwendung von Oracle JDK. Tatsächlich warnt sie davor.

Für eine vollständige Liste der Unterschiede siehe den Quellenartikel: Oracle JDK vs OpenJDK und Java JDK Entwicklungsvorgang

37voto

mars Punkte 471

Die Oracle- und OpenJDK-JVMs sind identisch und verfügen über die gleichen GC-Funktionen (gemäß der neuesten Versionen 10+). Bevor Oracle das OpenJDK-JVM verwaltete, gab es konkrete Unterschiede, die das alte OpenJDK-JVM in vielen Umgebungen fast unbrauchbar machten. Die JVMs sind jetzt gleich.

Die JDKs, die den JVM als Teil des Kits enthalten, unterscheiden sich in der Lizenzierung, dem Veröffentlichungs- und Wartungsplan und den in den JDK enthaltenen Software-Bibliotheken. Entscheidende Unterschiede bedeuten für mich auch Dinge, die dazu führen würden, dass der Code nicht funktioniert, wenn sie nicht vorhanden sind. Nicht nur die Lizenzierung.

diff --brief -r openjdk oraclejdk

Von entscheidender Bedeutung ist, dass die folgenden Dateien auf dem Linux-JDK fehlen (Wenn also behauptet wurde, dass der Code auf OpenJDK nicht funktioniert und auf OracleJDK funktioniert, während Sie JavaFX verwendet haben, dann hatten Sie recht):

Nur in jdk-10.0.1/bin: javapackager
Nur in jdk-10.0.1/bin: javaws
Nur in jdk-10.0.1/bin: jcontrol
Nur in jdk-10.0.1/bin: jmc
Nur in jdk-10.0.1/bin: jweblauncher
Nur in jdk-10.0.1/lib: ant-javafx.jar
Nur in jdk-10.0.1/lib: deploy
Nur in jdk-10.0.1/lib: deploy.jar
Nur in jdk-10.0.1/lib: desktop
Nur in jdk-10.0.1/lib: fontconfig.bfc
Nur in jdk-10.0.1/lib: fontconfig.properties.src
Nur in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Nur in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Nur in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Nur in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Nur in jdk-10.0.1/lib: fonts
Nur in jdk-10.0.1/lib: javafx.properties
Nur in jdk-10.0.1/lib: javafx-swt.jar
Nur in jdk-10.0.1/lib: java.jnlp.jar
Nur in jdk-10.0.1/lib: javaws.jar
Nur in jdk-10.0.1/lib: jdk.deploy.jar
Nur in jdk-10.0.1/lib: jdk.javaws.jar
Nur in jdk-10.0.1/lib: jdk.plugin.jar
Nur in jdk-10.0.1/lib: jfr
Nur in jdk-10.0.1/lib: libavplugin-53.so
Nur in jdk-10.0.1/lib: libavplugin-54.so
Nur in jdk-10.0.1/lib: libavplugin-55.so
Nur in jdk-10.0.1/lib: libavplugin-56.so
Nur in jdk-10.0.1/lib: libavplugin-57.so
Nur in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Nur in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Nur in jdk-10.0.1/lib: libbci.so
Nur in jdk-10.0.1/lib: libcmm.so
Nur in jdk-10.0.1/lib: libdecora_sse.so
Nur in jdk-10.0.1/lib: libdeploy.so
Nur in jdk-10.0.1/lib: libfxplugins.so
Nur in jdk-10.0.1/lib: libglassgtk2.so
Nur in jdk-10.0.1/lib: libglassgtk3.so
Nur in jdk-10.0.1/lib: libglass.so
Nur in jdk-10.0.1/lib: libgstreamer-lite.so
Nur in jdk-10.0.1/lib: libjavafx_font_freetype.so
Nur in jdk-10.0.1/lib: libjavafx_font_pango.so
Nur in jdk-10.0.1/lib: libjavafx_font.so
Nur in jdk-10.0.1/lib: libjavafx_iio.so
Nur in jdk-10.0.1/lib: libjfxmedia.so
Nur in jdk-10.0.1/lib: libjfxwebkit.so
Nur in jdk-10.0.1/lib: libnpjp2.so
Nur in jdk-10.0.1/lib: libprism_common.so
Nur in jdk-10.0.1/lib: libprism_es2.so
Nur in jdk-10.0.1/lib: libprism_sw.so
Nur in jdk-10.0.1/lib: librm.so
Nur in jdk-10.0.1/lib: libt2k.so
Nur in jdk-10.0.1/lib: locale
Nur in jdk-10.0.1/lib: missioncontrol
Nur in jdk-10.0.1/lib: oblique-fonts
Nur in jdk-10.0.1/lib: plugin.jar
Nur in jdk-10.0.1/lib: plugin-legacy.jar
Nur in jdk-10.0.1/lib/security: blacklist
Nur in jdk-10.0.1/lib/security: public_suffix_list.dat
Nur in jdk-10.0.1/lib/security: trusted.libraries
Nur in openjdk-10.0.1: man`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X