it-swarm.com.de

Unterschiede zwischen Oracle JDK und OpenJDK

HINWEIS: Diese Frage stammt aus dem Jahr 2014. Ab Java 11 OpenJDK und Oracle JDK konvergieren.

Gibt es entscheidende Unterschiede zwischen Oracle und OpenJDK?

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

Funktioniert GC zwischen den beiden unterschiedlich?

582
user1340582

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

OpenJDK und Oracle JDK sind Implementierungen derselben Java-Spezifikation, die das TCK (Java Technology Certification Kit) bestanden.

Die meisten JDK-Hersteller werden über OpenJDK geschrieben, indem sie ein paar Anpassungen vornehmen, um [meist lizenzierte, proprietäre Teile zu ersetzen/durch leistungsstärkere Elemente zu ersetzen, die nur für bestimmte Betriebssysteme funktionieren], ohne die TCK-Kompatibilität zu beeinträchtigen.

Viele Hersteller haben die Java-Spezifikation implementiert und TCK bestanden. Zum Beispiel IBM J9, Azul Zulu, Azul Zing und Oracle JDK.

Nahezu jedes bestehende JDK stammt von OpenJDK.

Wie von vielen vorgeschlagen, ist die Lizenzierung eine Änderung zwischen den JDKs. 

Beginnend mit dem JDK 11-Zugriff auf die Langzeit-Unterstützung benötigt Oracle JDK/Java SE jetzt eine kommerzielle Lizenz. Sie sollten nun darauf achten, welches JDK Sie installieren, da das Oracle JDK ohne Abonnement möglicherweise nicht mehr funktioniert. Quelle

Ref: Liste der virtuellen Java-Maschinen

252

Für Java 7 ist nichts entscheidend. Das OpenJDK-Projekt basiert hauptsächlich auf HotSpot Quellcode, der von Sun gespendet wurde.

Darüber hinaus wurde OpenJDK als Referenzimplementierung für Java 7 ausgewählt und wird von Oracle-Ingenieuren gewartet.

Ab 2012 gibt es eine detailliertere Antwort auf Unterschied zwischen JVM, JDK, JRE und OpenJDK , die auf einen Oracle-Blogbeitrag verweisen :

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

A: Es ist sehr nahe - unser Erstellungsprozess für Oracle JDK-Releases erstellt auf OpenJDK 7, indem Sie nur ein paar Teile hinzufügen, wie den Implementierungscode Dazu gehört auch die Implementierung des Java-Plugins und von Java durch Oracle WebStart sowie einige Closed Source-Komponenten von Drittanbietern, wie z. B. ein Grafik-Rasterizer, einige Open-Source-Komponenten von Drittanbietern, wie Rhino und ein paar Kleinigkeiten hier und dort, wie zusätzliche Dokumentation oder Schriftarten von Drittanbietern. Im weiteren Verlauf ist es unsere Absicht, Öffnen Sie alle Teile des Oracle JDK mit Ausnahme derjenigen, die wir betrachten. kommerzielle Funktionen wie JRockit Mission Control (noch nicht verfügbar in Oracle JDK), und ersetzen Sie belastete Komponenten von Drittanbietern durch Open Source-Alternativen, um eine engere Parität zwischen dem Code zu erreichen Basen.

316
radai

Ein wesentlicher Unterschied ist der Releasezeitplan und die Supportrichtlinien. 

OpenJDK

OpenJDK wird alle 6 Monate eine Feature-Version haben, die nur bis zur nächsten Feature-Version unterstützt wird. Es ist im Wesentlichen ein kontinuierlicher Strom von Releases für Entwickler. 

Oracle JDK

Das Oracle JDK richtet sich eher an ein Unternehmenspublikum, das Wert auf Stabilität legt. Es basiert auf einer der OpenJDK-Versionen, aber wird dann langfristig unterstützt (LTS). Das Oracle JDK hat alle drei Jahre eine Veröffentlichung geplant. 

 enter image description here

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

Für Java 8, Oracle JDK vs. OpenJDK meine wichtigsten Unterschiede:

  • OpenJDK ist eine Open Source-Implementierung der Java Standard Edition-Plattform, die von Oracle und der offenen Java-Community unterstützt wird.

  • OpenJDK steht unter der Lizenz GPL v2, wobei Oracle JDK unter der Oracle Binary Code License Agreement lizenziert ist.

  • Tatsächlich erstellt der Build-Prozess von Oracle JDK den OpenJDK-Quellcode. Es gibt also keinen wesentlichen technischen Unterschied zwischen Oracle JDK und OpenJDK . Neben dem Basiscode umfasst Oracle JDK die Oracle-Implementierung von Java Plugin und Java WebStart. Dazu gehören auch Closed-Source- und Open-Source-Komponenten von Drittanbietern, wie etwa Graphics Rasterizer und Rhino .. .. OpenJDK Font Renderer und Oracle JDK Flight Recorder sind die auffälligen Unterschiede zwischen Oracle JDK und OpenJDK.

  • Rockit war die JVM von Oracle und aus Java SE 7 wurden HotSpot und JRockit zu einer einzigen JVM zusammengeführt. Jetzt haben wir nur noch die zusammengeführte HotSpot-JVM zur Verfügung.
  • Es gibt Fälle, in denen Leute behaupten, dass sie beim Ausführen von OpenJDK Probleme hatten und die beim Umstieg auf Oracle JDK behoben wurden.
  • Twitter hat ein eigenes JDK.
  • Software wie Minecraft erwartet die Verwendung von Oracle JDK. In der Tat warnt.

Eine vollständige Liste der Unterschiede finden Sie im Quelltext: Oracle JDK vs. OpenJDK und Java JDK-Entwicklungsprozess

24
45hook

Die JVMs von Oracle und OpenJDK sind identisch und verfügen über dieselben GC-Funktionen (ab Version 10+). Vor der Verwaltung der OpenJDK-JVM durch Oracle gab es konkrete Unterschiede, durch die die alte JVM von Openjdk in vielen Umgebungen nahezu unbrauchbar wurde. Die JVMs sind jetzt gleich.

Die JDKs, die die JVM als Teil des Kits enthalten, unterscheiden sich durch Lizenzierung, Release- und Wartungszeitplan sowie die im JDK enthaltenen Softwarebibliotheken. Entscheidende Unterschiede bedeuten für mich auch Dinge, die dazu führen, dass Code nicht ausgeführt wird, wenn er nicht vorhanden ist. Nicht nur Lizenzen. 

diff --brief -r openjdk oraclejdk

Entscheidend sind die folgenden Dateien neben einer Reihe anderer Dateien im Linux-JDK. (Wenn Sie also "behaupteten", dass der Code unter OpenJDK nicht funktionierte und unter OracleJDK während der Verwendung von Javafx, dann waren Sie richtig):

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

Laut dem Oracle-Blog Oracle JDK Releases für Java 11 und höher

Beginnend mit Java 11, wird Oracle JDK-Releases unter Open Source GNU General Public License v2 mit der Classpath Exception (GPLv2 + CPE) und unter einer kommerziellen Lizenz bereitstellen Lizenz für Benutzer des Oracle JDK als Teil eines Oracle-Produkts oder -Dienstes oder für Benutzer, die keine Open-Source-Software verwenden möchten. Diese Kombination aus Open-Source-Lizenz und kommerzieller Lizenz ersetzt die bisherige " BCL ”Lizenz, die eine Kombination aus kostenlosen und kostenpflichtigen kommerziellen Bedingungen enthält.

Für jede Lizenz werden unterschiedliche Builds bereitgestellt, aber diese Builds sind abgesehen von einigen kosmetischen und Verpackungsunterschieden, die nachstehend ausführlich beschrieben werden, funktional identisch.

Von der BCL zur GPL

Die Binärcode - Lizenz für Oracle Java SE - Technologien ("BCL") war die primäre Lizenz für Oracle Java SE - Technologien für Weit über ein Jahrzehnt. Die BCL erlaubt die Verwendung ohne Lizenzgebühren unter bestimmten Bedingungen. Um die Zukunft zu vereinfachen, startete Oracle Bereitstellung von Open Source-lizenzierten OpenJDK-Builds ab Java 9 Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien kostenlos zu erhalten, können Sie dies einfach mit den OpenJDK-Builds von Oracle fortsetzen, die unter jdk verfügbar sind .Java.net . Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien als Teil eines kommerziellen Produkts oder einer Dienstleistung von Oracle abzurufen, können Sie weiterhin Oracle JDK-Releases erhalten über: My Oracle Support (MOS) und andere Speicherorte.

Funktionell identisch und austauschbar ...

Das BCL-lizenzierte JDK von Oracle enthielt in der Vergangenheit „kommerzielle Funktionen“, die in OpenJDK-Builds nicht verfügbar waren. Wie versprochen Im vergangenen Jahr hat Oracle diese Funktionen zur OpenJDK-Community beigetragen, darunter:

Ab Java 11) sind Oracle JDK-Builds und OpenJDK-Builds daher im Wesentlichen identisch.

... noch mit einigen kosmetischen und Verpackungsunterschieden

Es bleibt eine kleine Anzahl von Unterschieden, einige absichtliche und kosmetische, und einige, weil mehr Zeit für Diskussionen mit OpenJDK-Mitwirkenden erforderlich ist.

  • Oracle JDK 11 gibt bei Verwendung der Option -XX: + UnlockCommercialFeatures eine Warnung aus, während bei OpenJDK-Builds diese Option zu einem Fehler führt. Diese Option war nie Teil von OpenJDK und es wäre nicht sinnvoll, sie jetzt hinzuzufügen, da OpenJDK keine kommerziellen Funktionen enthält. Dieser Unterschied bleibt bestehen, um Benutzern von Oracle JDK 10 und früheren Releases die Migration auf Oracle JDK 11 und höher zu erleichtern.
  • Oracle JDK 11 kann so konfiguriert werden, dass Verwendungsprotokolldaten für das Tool " Advanced Management Console " bereitgestellt werden, bei dem es sich um ein separates kommerzielles Oracle-Produkt handelt. Wir werden mit anderen OpenJDK-Mitwirkenden zusammenarbeiten, um zu diskutieren, wie solche Nutzungsdaten in OpenJDK in zukünftigen Releases nützlich sein können, wenn überhaupt. Dieser Unterschied besteht hauptsächlich darin, Oracle-Kunden eine konsistente Erfahrung zu bieten, bis solche Entscheidungen getroffen werden.
  • Der Befehl javac --release verhält sich für die Ziele Java 9 und Java 10) unterschiedlich, da in diesen Releases das Oracle JDK einige zusätzliche Module enthielt, die nicht Teil waren der entsprechenden OpenJDK-Releases:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • Java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

Dieser Unterschied bleibt bestehen, um eine konsistente Erfahrung für bestimmte Arten von Legacy-Nutzung bereitzustellen. Diese Module sind entweder jetzt separat als Teil von OpenJFX verfügbar, sind jetzt sowohl in OpenJDK als auch in Oracle JDK enthalten, da es sich um kommerzielle Funktionen handelte, die Oracle zu OpenJDK beigetragen hat (z. B. Flight Recorder), oder wurden aus Oracle entfernt JDK 11 (z. B. JNLP).

  • Die Ausgabe der Befehle Java --version und Java --fullversion unterscheidet Oracle-JDK-Builds von OpenJDK-Builds, sodass Support-Teams mögliche Probleme diagnostizieren können Insbesondere führt das Ausführen von Java --version mit einem Oracle JDK 11-Build zu folgenden Ergebnissen:

Java 11 2018-09-25

Java (TM) SE-Laufzeitumgebung 18.9 (Build 11 + 28)

Java HotSpot (TM) 64-Bit-Server VM 18.9 (Build 11 + 28, gemischter Modus)

Und für einen OpenJDK 11 Build:

openjdk version "11" 25.09.2018

OpenJDK Runtime Environment 18.9 (Build 11 + 28)

OpenJDK 64-Bit Server VM 18.9 (Build 11 + 28, gemischter Modus)

  • Das Oracle JDK hat immer verlangt, dass Kryptografieanbieter von Drittanbietern mit einem bekannten Zertifikat signiert sind. Das Kryptografierahmenwerk in OpenJDK verfügt über eine offene kryptografische Schnittstelle, dh, es schränkt nicht ein, welche Anbieter verwendet werden können. Oracle JDK 11 verwendet weiterhin erforderlich eine gültige Signatur, und Oracle OpenJDK-Builds ermöglichen weiterhin die Verwendung eines gültigen Kryptoanbieters mit Signatur oder eines nicht signierten Kryptoanbieters von Drittanbietern.
  • Oracle JDK 11 wird weiterhin Installer, Branding und JRE-Packaging enthalten, um eine Erfahrung zu ermöglichen, die mit älteren Desktop-Anwendungen vereinbar ist. Oracle OpenJDK-Builds sind derzeit als Zip- und tar.gz-Dateien verfügbar, wobei alternative Distributionsformate in Betracht gezogen werden.
12
Naresh Joshi

Eine Liste der wenigen verbleibenden Kosmetik- und Verpackungsunterschiede zwischen Oracle JDK 11 und OpenJDK 11 finden Sie in diesem Blogpost:

https://blogs.Oracle.com/Java-platform-group/Oracle-jdk-releases-for-Java-11-und- später

Zusamenfassend:

  • Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX: + UnlockCommercialFeatures verwendet wird.
  • es kann konfiguriert werden, um Nutzungsprotokolldaten an das "Advanced Management Console" -Tool bereitzustellen. 
  • es hat immer verlangt, dass Verschlüsselungsanbieter von Drittanbietern mit einem bekannten Zertifikat signiert werden. 
  • installer, Branding und JRE-Verpackungen werden weiterhin einbezogen.
  • der Befehl javac --release verhält sich für die Ziele von Java 9 und Java 10 etwas anders, und 
  • die Ausgabe der Befehle Java - Version und Java - Vollversion unterscheidet Oracle JDK-Builds von OpenJDK-Builds.
7
Dalibor Topic
  1. Oracle wird alle drei Jahre Releases bereitstellen, während OpenJDK alle sechs Monate veröffentlicht wird.
  2. Oracle bietet langfristigen Support für seine Releases. Auf der anderen Seite unterstützt OpenJDK die Änderungen an einem Release nur, bis die nächste Version veröffentlicht wird.
  3. Oracle JDK wurde unter der Lizenzvereinbarung für Oracle Binary Code lizenziert, während OpenJDK über die GNU General Public License (GNU GPL) Version 2 mit einer Linking-Ausnahme verfügt.
  4. Das Oracle-Produkt verfügt über Funktionen für Flight Recorder, Java Mission Control und Application Class-Data Sharing, während OpenJDK über die Funktion Font Renderer verfügt. Außerdem bietet Oracle mehr Garbage Collection-Optionen und bessere Renderer.
  5. Oracle JDK wird vollständig von der Oracle Corporation entwickelt, während das OpenJDK von Oracle, OpenJDK und der Java Community entwickelt wird. Aber auch die Top-Unternehmen wie Red Hat, Azul Systems, IBM, Apple Inc., SAP AG beteiligen sich aktiv an der Entwicklung.

Von Java 11 bis zu einer großen Veränderung

Oracle wird seine bisherige BCL-Lizenz durch eine Kombination aus Open Source- und kommerzieller Lizenz ändern

  • Das Oracle-Kit für Java 11 gibt bei Verwendung der Option -XX: + UnlockCommercialFeatures eine Warnung aus, während diese Option in OpenJDK-Builds zu einem Fehler führt
  • Oracle JDK bietet eine Konfiguration zur Bereitstellung von Nutzungsprotokolldaten für das Tool "Advanced Management Console"
  • Oracle hat immer verlangt, dass Kryptografieanbieter von Drittanbietern mit einem bekannten Zertifikat signiert werden, während das Kryptografierahmenwerk in OpenJDK über eine offene Kryptografieschnittstelle verfügt, was bedeutet, dass es keine Einschränkung gibt, welche Anbieter verwendet werden dürfen
  • Oracle JDK 11 wird weiterhin Installer, Branding und JRE-Paketierung enthalten, während OpenJDK-Builds derzeit als Zip- und tar.gz-Dateien verfügbar sind
  • Der Befehl javac –release verhält sich für die Ziele Java 9 und Java 10 unterschiedlich, da in der Oracle-Version einige zusätzliche Module vorhanden sind
  • Die Ausgabe der Befehle Java - version und Java - fullversion unterscheidet Oracle-Builds von OpenJDK-Builds


Update: 25.08.2019



enter image description here

für weitere Details Oracle-vs-openjdk

2

Abgesehen von den offensichtlichen Lizenzunterschieden besteht der Hauptunterschied zwischen OpenJDK und OracleJDK 11 in Bezug auf Stabilität und Leistung.

Quelle: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

Alle 6 Monate werden die beiden Codebases synchron sein. Während des 6-Monats-Fensters erhält OpenJDK jedoch nur Sicherheitsupdates, während OracleJDK zusätzliche Stabilitäts- und Leistungsupdates erhält.

Da Update-Versionen sowohl für OpenJDK als auch für OracleJDK nur alle 3 Monate erscheinen, verpassen Sie (höchstens) Fixes für 3 Monate, bis die nächste Hauptversion erscheint und Sie ein Upgrade durchführen. Wenn Sie sich jedoch für LTS-Releases entscheiden, erscheint eine kommerzielle Lizenz sinnvoller.

2
Gili

Auch für Java 8 und einen interessanten Leistungsmaßstab für reaktive (nicht blockierende) Spring Boot REST Anwendung, die auf verschiedenen JVMs von AMIS Technology Blog gehostet wird, wurde im November 2018 veröffentlicht , unter anderem Unterschiede:

  • OpenJDK hat eine höhere CPU-Auslastung als OracleJDK.
  • OpenJDK hat etwas kürzere Antwortzeiten als OracleJDK.
  • OpenJDK hat eine höhere Speichernutzung als OracleJDK.

Details finden Sie im Quellartikel.

Natürlich, YMMV, das ist nur einer der Benchmarks.

0
Greg Dubicki