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?

26voto

Naresh Joshi Punkte 3792

Laut dem Oracle-Blog Oracle JDK Releases for Java 11 and Later

Ab Java 11 wird Oracle JDK-Versionen unter der Open-Source- GNU General Public License v2 mit Ausnahmeregelung für die Klassendatei (GPLv2+CPE) und unter einer kommerziellen Lizenz für diejenigen bereitstellen, die das Oracle JDK als Teil eines Oracle-Produkts oder -Dienstes verwenden oder die keine Open-Source-Software verwenden möchten. Diese Kombination aus Open-Source-Lizenz und kommerzieller Lizenz ersetzt die historische " BCL "-Lizenz, die eine Kombination aus kostenlosen und kostenpflichtigen kommerziellen Bedingungen enthielt.

Es werden verschiedene Builds für jede Lizenz bereitgestellt, aber diese Builds sind funktional identisch, abgesehen von einigen kosmetischen und Verpackungsunterschieden, die unten im Detail beschrieben werden.

Vom BCL zur GPL

Die Binär-Code-Lizenz für Oracle Java SE-Technologien ("BCL") war über ein Jahrzehnt lang die primäre Lizenz für Oracle Java SE-Technologien. Die BCL erlaubt die Nutzung unter bestimmten Bedingungen ohne Lizenzgebühren. Um die Dinge zukünftig zu vereinfachen, begann Oracle damit, Open-Source-lizenzierte OpenJDK-Builds seit Java 9 bereitzustellen, wobei dasselbe Lizenzmodell wie für die Linux-Plattform verwendet wird. Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien kostenlos zu erhalten, können Sie dies einfach mit den bei Oracle erhältlichen OpenJDK-Builds unter jdk.java.net fortsetzen. Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien als Teil eines kommerziellen Produkts oder Dienstes von Oracle zu erhalten, können Sie weiterhin Oracle JDK-Versionen über My Oracle Support (MOS) und anderen Standorten beziehen.

Funktional identisch und austauschbar...

Oracles BCL-lizenziertes JDK enthielt historisch gesehen "kommerzielle Funktionen", die nicht in OpenJDK-Builds verfügbar waren. Wie versprochen hat Oracle jedoch im letzten Jahr diese Funktionen der OpenJDK-Community zur Verfügung gestellt, darunter:

Ab Java 11 weisen Oracle JDK-Builds und OpenJDK-Builds daher eine grundsätzliche Identität auf.

...mit einigen kosmetischen und Verpackungsunterschieden

Es gibt immer noch einige wenige Unterschiede, einige davon absichtlich und kosmetischer Natur, und einige einfach, weil eine längere Diskussion mit OpenJDK-Mitarbeitern erforderlich ist.

  • Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX:+UnlockCommercialFeatures verwendet wird, während in OpenJDK-Builds diese Option zu einem Fehler führt. Diese Option war nie Bestandteil von OpenJDK und es würde keinen Sinn machen, sie jetzt hinzuzufügen, da keine kommerziellen Funktionen in OpenJDK enthalten sind. Dieser Unterschied bleibt bestehen, um es Benutzern von Oracle JDK 10 und früheren Versionen zu erleichtern, auf Oracle JDK 11 und später zu migrieren.
  • Oracle JDK 11 kann so konfiguriert werden, dass Nutzungsdaten an das " Advanced Management Console " Tool weitergeleitet werden, das ein separates kommerzielles Oracle-Produkt ist. Wir werden mit anderen OpenJDK-Mitarbeitern zusammenarbeiten, um zu erörtern, wie solche Nutzungsdaten in zukünftigen OpenJDK-Versionen nützlich sein können. Dieser Unterschied besteht hauptsächlich, um ein konsistentes Erlebnis für Oracle-Kunden zu bieten, bis solche Entscheidungen getroffen sind.
  • Das javac --release-Kommando verhält sich für die Java 9- und Java 10-Ziele anders, da in diesen Versionen das Oracle JDK einige zusätzliche Module enthielt, die in den entsprechenden OpenJDK-Versionen nicht enthalten waren:
    • 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 ein konsistentes Erlebnis für bestimmte Arten von Legacy-Anwendungen zu bieten. Diese Module sind entweder jetzt separat als Teil von OpenJFX verfügbar, sind jetzt sowohl in OpenJDK als auch im Oracle JDK enthalten, da es sich um kommerzielle Funktionen handelte, die Oracle an OpenJDK beigetragen hat (z. B. Flight Recorder), oder wurden aus dem Oracle JDK 11 entfernt (z. B. JNLP).

  • Die Ausgabe der Befehle java --version und java -fullversion wird in Oracle JDK-Builds von OpenJDK-Builds unterscheiden, damit Support-Teams etwaige vorhandene Probleme diagnostizieren können. Insbesondere führt die Ausführung von java --version mit einem Oracle JDK 11-Build zu:

java 11 2018-09-25

Java(TM) SE-Runtime-Umgebung 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" 2018-09-25

OpenJDK-Runtime-Umgebung 18.9 (Build 11+28)

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

  • Das Oracle JDK hat schon immer verlangt, dass kryptografische Anbieter von Drittanbietern von einem bekannten Zertifikat signiert werden. Das Kryptografie-Framework in OpenJDK verfügt über eine offene kryptografische Schnittstelle, was bedeutet, dass nicht festgelegt ist, welche Anbieter verwendet werden können. Oracle JDK 11 wird weiterhin eine gültige Signatur erfordern, und Oracle OpenJDK-Builds werden auch weiterhin die Verwendung eines gültigen Signature oder eines nicht signierten kryptografischen Drittanbieters erlauben.
  • Oracle JDK 11 wird Installationsprogramme, Branding und JRE-Verpackungen für eine konsistente Erfahrung mit Desktop-Anwendungen enthalten. Oracle OpenJDK-Builds sind derzeit als Zip- und Tar-GZ-Dateien verfügbar, während alternative Vertriebsformate in Betracht gezogen werden.

17voto

Istiaque Hossain Punkte 1827
  1. Oracle wird alle drei Jahre neue Versionen herausbringen, während OpenJDK alle sechs Monate veröffentlicht wird.
  2. Oracle bietet langfristige Unterstützung für seine Versionen. Andererseits unterstützt OpenJDK Änderungen an einer Version nur bis zur Veröffentlichung der nächsten Version.
  3. Oracle JDK wurde unter dem Oracle Binary Code License Agreement lizenziert, während OpenJDK die GNU General Public License (GNU GPL) Version 2 mit einer Linking-Ausnahme hat.
  4. Oracle-Produkt hat Flight Recorder, Java Mission Control und Application Class-Data Sharing Features, während OpenJDK das Schriftarten-Render-Feature hat. 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. Allerdings beteiligen sich auch Spitzenunternehmen wie Red Hat, Azul Systems, IBM, Apple Inc., SAP AG aktiv an seiner Entwicklung.

Von Java 11 an wird sich eine große Änderung ergeben

Oracle wird seine historische "BCL" Lizenz durch eine Kombination aus einer Open-Source- und einer kommerziellen Lizenz ersetzen

  • Oracles Kit für Java 11 gibt eine Warnung aus, wenn die Option -XX:+UnlockCommercialFeatures verwendet wird, während in OpenJDK-Builds diese Option zu einem Fehler führt
  • Oracle JDK bietet eine Konfiguration, um Nutzungsprotokolldaten für das Tool "Advanced Management Console" bereitzustellen
  • Oracle hat immer verlangt, dass kryptographische Anbieter von Drittanbietern von einem bekannten Zertifikat signiert werden müssen, während das Kryptographie-Framework in OpenJDK eine offene kryptographische Schnittstelle hat, was bedeutet, dass es keine Einschränkung gibt, welche Anbieter verwendet werden können
  • Oracle JDK 11 wird weiterhin Installationsprogramme, Branding und JRE-Verpackungen 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 aufgrund des Vorhandenseins zusätzlicher Module in Oracles Release unterschiedlich
  • Die Ausgabe der Befehle java --version und java -fullversion wird Oracles Builds von OpenJDK-Builds unterscheiden


Aktualisierung: 25-Aug-2019



Bildbeschreibung hier eingeben

für weitere Details oracle-vs-openjdk

11voto

Dalibor Topic Punkte 657

Eine Liste der wenigen verbleibenden kosmetischen und Verpackungsunterschiede zwischen Oracle JDK 11 und OpenJDK 11 finden Sie in diesem Blogbeitrag:

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

Kurz gesagt:

  • Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX:+UnlockCommercialFeatures verwendet wird,
  • es kann so konfiguriert werden, dass Nutzungsprotokolldaten dem Tool "Advanced Management Console" bereitgestellt werden,
  • es hat schon immer erforderlich gemacht, dass kryptografische Drittanbieteranbieter von einem bekannten Zertifikat signiert werden,
  • es wird weiterhin Installationsprogramme, Branding und JRE-Verpackung enthalten,
  • während der Befehl javac --release sich für die Java 9- und Java 10-Ziele geringfügig anders verhält, und
  • die Ausgabe der Befehle java --version und java -fullversion wird Oracle JDK-Builds von OpenJDK-Builds unterscheiden.

9voto

Gili Punkte 80842

Abgesehen vom offensichtlichen Lizenzunterschied besteht der Hauptunterschied zwischen OpenJDK und OracleJDK 11 in Stabilitäts- und Leistungsaktualisierungen.

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

Alle 6 Monate werden die beiden Codebasen synchronisiert sein. Während des 6-Monats-Zeitfensters erhält OpenJDK jedoch nur Sicherheitsupdates, während OracleJDK zusätzliche Stabilitäts- und Leistungsaktualisierungen erhält.

Da Update-Veröffentlichungen nur alle 3 Monate sowohl für OpenJDK als auch für OracleJDK erfolgen, bedeutet dies, dass Sie (höchstens) 3 Monate Fixes verpassen, bis die nächste Hauptveröffentlichung erfolgt und Sie ein Upgrade durchführen. Wenn Sie jedoch LTS-Veröffentlichungen bevorzugen, ergibt eine kommerzielle Lizenz mehr Sinn.

6voto

Greg Dubicki Punkte 4649

Auch für Java 8 wurde im November 2018 von AMIS Technology Blog ein interessanter Leistungsvergleich für reaktive (nicht-blockierende) Spring Boot REST-Anwendungen, die auf verschiedenen JVMs ausgeführt werden, veröffentlicht zeigend, dass unter anderem:

  • OpenJDK eine höhere CPU-Auslastung als OracleJDK hat,
  • OpenJDK eine etwas niedrigere Antwortzeit als OracleJDK hat,
  • OpenJDK einen höheren Speicherverbrauch als OracleJDK hat,

Weitere Details finden Sie im Quellenartikel.

Natürlich kann Ihre Erfahrung variieren, dies ist nur einer der Leistungsvergleiche.

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