Unterschiede zwischen Oracle JDK und OpenJDK

700

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

Gibt es entscheidende Unterschiede zwischen Oracle und OpenJDK?

Sind beispielsweise die Garbage Collection und andere JVM-Parameter gleich?

Funktioniert GC zwischen den beiden unterschiedlich?

user1340582
quelle
3
Dies kann auch relevant sein, wenn Sie von Oracle zu OpenJDK wechseln möchten, da Oracle nicht mehr kostenlos ist. developer.redhat.com/blog/2018/11/05/…
Leo Ufimtsev

Antworten:

338

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 hat.

Die meisten Anbieter von JDK werden auf OpenJDK geschrieben, indem einige Änderungen an [hauptsächlich zum Ersetzen lizenzierter proprietärer Teile / Ersetzen durch leistungsstärkere Elemente, die nur unter bestimmten Betriebssystemen funktionieren] -Komponenten vorgenommen wurden, ohne die TCK-Kompatibilität zu beeinträchtigen.

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

Fast jedes vorhandene JDK wird von OpenJDK abgeleitet.

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

Ab JDK 11 für den Zugriff auf die Langzeitunterstützung benötigt Oracle JDK / Java SE jetzt eine kommerzielle Lizenz. Sie sollten jetzt darauf achten, welches JDK Sie installieren, da Oracle JDK ohne Abonnement möglicherweise nicht mehr funktioniert. Quelle

Ref: Liste der virtuellen Java-Maschinen

Venkateswara Rao
quelle
13
Sie sagen also, dass openjdk die Basis für alle anderen jdks ist, nur dass sie es kopieren und dann nach eigenen Spezifikationen optimieren?
Karl Morrison
24
Ich bin zu spät zur Party, aber ich werde trotzdem fragen. Was bringt jdk auf den Tisch, was openjdk nicht tut? All diese Antworten lassen openjdk in jeder Hinsicht gleich oder überlegen klingen, aber wenn dies der Fall ist, warum kümmert sich Oracle überhaupt darum, jdk zu warten?
Kefka
@ Karl Morrison Soweit ich weiß, .. jeder, der JVM-Spezifikationen implementiert, tut dies nur auf diese Weise .. aber es gibt keine explizite Regel, dass man auf diese Weise folgen muss ...
Venkateswara Rao
13
@ Mella OpenJDK <= OracleJDK In Oracle JDK sind beispielsweise nur wenige vertrauenswürdige Schlüssel eingerichtet, die nicht in OpenJDK enthalten waren (heutzutage werden sie nur noch importiert, um diese Lücke zu schließen). Oracle JDK verfügt über einige SWING-Bibliotheken, die proprietär sind, um das Rendern zu beschleunigen .. (Wer Server-Apps ausführt, ist möglicherweise für sie irrelevant.) Oracle JDK verfügt über ein Applet-Plugin (der gleiche Grund wie oben funktioniert). Oracle JDK-Bugfix / Hotfix wird von Oracle verteilt und ordnungsgemäß verarbeitet. Als OpenJDK ist es wenig technisch, dies sicherzustellen Patches werden angewendet und welchen Konflikt sie haben würden
Venkateswara Rao
Beachten Sie, dass Oracle mit dem neuen Release-Modell für Java plant, die Lücke zwischen beiden JDKs so weit wie möglich zu verringern. Gibt es andere Open Source-Mitwirkende zum Öffnen von JDK als Oracle-Entwickler? Dies ist zu verstehen, ob genügend Unterstützung vorhanden ist, um einen Fix von der neuesten Version auf die vorherige Version zurück zu portieren. Irgendwelche Gedanken?
Andy Dufresne
329

Für Java 7 nichts Entscheidendes. Das OpenJDK-Projekt basiert hauptsächlich auf dem von Sun gespendeten HotSpot- Quellcode.

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

Ab 2012 gibt es eine detailliertere Antwort zum Unterschied zwischen JVM, JDK, JRE und 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 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 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.

Radai
quelle
42
Auch gibt es Lizenzunterschiede.
mcoolive
9
Danke, ich habe eine bessere Antwort gefunden. stackoverflow.com/questions/17360011/…
astroanu
9
Bei ARM scheinen sich zumindest diese beiden in der Leistung erheblich zu unterscheiden. Ich müsste ein Profil erstellen, warum es passiert, aber der subjektive Unterschied ist "Oracle JDK ist in Ordnung" und "OpenJDK ist völlig unbrauchbar".
Dualed
1
@dualed dennoch wechselt Android ab Android 7 zu openjdk. Sieht so aus, als würden sie signifikante Verbesserungen vorbereiten. Venturebeat.com/2015/12/29/…
Johnny Doe
1
@JohnnyDoe Hoffen wir, dass Google, wenn es zu OpenJDK wechselt, Upstream-Performance-Patches bereitstellt, damit es auch außerhalb von Android auf ARM gut läuft!
Dualed
95

Ein wesentlicher Unterschied für die Zukunft ist der Release-Zeitplan und die Support-Richtlinie.

OpenJDK

OpenJDK wird alle 6 Monate ein Feature-Release haben, das nur bis zum nächsten Feature-Release unterstützt wird. Es handelt sich im Wesentlichen um einen kontinuierlichen Strom von Veröffentlichungen, die sich an Entwickler richten.

Oracle JDK

Das Oracle JDK richtet sich eher an ein Unternehmen, das Stabilität schätzt. Es basiert auf einer der OpenJDK-Versionen, wird dann aber langfristig unterstützt (LTS). Das Oracle JDK hat alle 3 Jahre Veröffentlichungen geplant.

Geben Sie hier die Bildbeschreibung ein

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

Der Gilbert Arenas Dolch
quelle
3
Für Langzeitversionen müssen Sie kommerziellen Support erwerben, um nach 6 Monaten der Java-Veröffentlichung Updates zu erhalten. Welche Bedeutung haben Langzeitfreigaben im Vergleich zu Kurzzeitfreigaben? Haben kurzfristige Releases wie JDK 9/10 keine kommerzielle Unterstützung von Oracle?
Andy Dufresne
@AndyDufresne warum denkst du, musst du nach nur 6 Monaten für den Support bezahlen? Mein Verständnis ist, dass die Zeitachse TBD ist. 6 Monate scheinen allerdings furchtbar kurz zu sein ... Ich bezweifle, dass wir öffentliche Updates für 5 Jahre erwarten können, wie es Java 8 bekommt, aber ich wäre nicht überrascht, wenn es öffentliche Updates für 2 oder 3 Jahre gäbe. Referenz - Dies ist per: oracle.com/technetwork/java/eol-135779.html .
Der Gilbert Arenas Dolch
1
Der Oracle-Link erwähnt: "Zum Beispiel wird die LTS-Version für Oracle JDK 11 (18.9 LTS) mindestens 5 Jahre lang unterstützt, wie in der Oracle Lifetime Support Policy beschrieben." Die Richtlinie verfügt über drei Unterstützungsstufen, von denen keine kostenlos zu sein scheint. Ich erwähne dies auch, nachdem ich mir den Kommentar von azul CTO hier angesehen habe - blog.takipi.com/java-11-will-include-more-than-just-features/… . Das Hauptziel dieser neuen Release-Strategie besteht darin, keine Zeit für die Pflege alter Releases aufzuwenden. Wenn die Unterstützung kostenlos wäre, wäre das Modell das gleiche wie bisher.
Andy Dufresne
38

Für Java 8 , Oracle JDK vs. OpenJDK, nehme ich die wichtigsten Unterschiede:

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

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

  • Der Build-Prozess von Oracle JDK basiert auf OpenJDK-Quellcode. Es gibt also keinen wesentlichen technischen Unterschied zwischen Oracle JDK und OpenJDK. Neben dem Basiscode umfasst Oracle JDK die Implementierung von Java Plugin und Java WebStart durch Oracle. Es enthält auch Closed Source- und Open Source-Komponenten von Drittanbietern wie Grafik-Rasterizer und Rhino . OpenJDK Font Renderer und Oracle JDK Flight Recorder sind die spürbaren Hauptunterschiede 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 die zusammengeführte HotSpot-JVM zur Verfügung.
  • Es gibt Fälle, in denen Leute behaupten, sie hätten Probleme beim Ausführen von OpenJDK gehabt und diese wurden behoben, als sie auf Oracle JDK umgestellt 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 Quellartikel: Oracle JDK vs OpenJDK und Java JDK Development Process

45hook
quelle
4
Für Android Studio gilt dies nicht mehr: Eine Kopie des neuesten OpenJDK wird mit Android Studio 2.2 und höher geliefert. Dies ist die JDK-Version, die Sie für Ihre Android-Projekte empfehlen. Quelle: developer.android.com/studio/intro/studio-config#jdk
MKesper
„Software wie Minecraft erwartet, dass Oracle JDK verwendet wird. In der Tat warnt. " In Ubuntu ruft Mojangs offizielles .deb-Installationsprogramm OpenJDK auf, wenn der Launcher installiert wird.
Moilleadóir
29

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

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

diff --brief -r openjdk oraclejdk

Entscheidend ist, dass die folgenden Dateien zusätzlich zu einer Reihe anderer Dateien im Linux-JDK fehlen (Wenn Sie also behaupteten, dass der Code unter OpenJDK und unter OracleJDK während der Verwendung von javafx nicht funktioniert hat, waren Sie korrekt):

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`
Mars
quelle
5
Vielen Dank, dass Sie auf die wirklichen Unterschiede hingewiesen haben : Code, der nicht ausgeführt wird, ist eine echte Angelegenheit. Woher hast du dich gestützt diff?
Matthieu
19

Laut dem Oracle-Blog wird Oracle JDK für Java 11 und höher veröffentlicht

Ab Java 11 wird Oracle JDK-Versionen unter der Open Source GNU General Public License v2, mit der Classpath Exception (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 der Verwendung einer Open Source-Lizenz und einer kommerziellen Lizenz ersetzt die historische „ BCL “ -Lizenz, die eine Kombination aus kostenlosen und kostenpflichtigen kommerziellen Bedingungen enthielt.

Für jede Lizenz werden unterschiedliche Builds bereitgestellt. Diese Builds sind jedoch funktional identisch, abgesehen von einigen kosmetischen und Verpackungsunterschieden, die im Folgenden ausführlich beschrieben werden.

Von der BCL zur GPL

Die Binärcodelizenz für Oracle Java SE-Technologien („BCL“) ist seit mehr als einem Jahrzehnt die Hauptlizenz für Oracle Java SE-Technologien. Die BCL erlaubt unter bestimmten Bedingungen die Nutzung ohne Lizenzgebühren. Um die Zukunft zu vereinfachen, hat Oracle ab Java 9 Open Source-lizenzierte OpenJDK-Builds bereitgestellt , die dasselbe Lizenzmodell wie die Linux-Plattform verwenden. 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.java.net verfügbar sind . Wenn Sie es gewohnt sind, Oracle Java SE-Binärdateien als Teil eines kommerziellen Produkts oder Dienstes von Oracle abzurufen, können Sie Oracle JDK-Versionen weiterhin über My Oracle Support (MOS) und andere Standorte abrufen.

Funktionsgleich und austauschbar ...

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

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

... doch mit einigen kosmetischen und Verpackungsunterschieden

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

  • Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX: + UnlockCommercialFeatures verwendet wird, während diese Option in OpenJDK-Builds 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 Versionen 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 Versionen 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 Java 9- und Java 10-Ziele unterschiedlich, da das Oracle JDK in diesen Versionen einige zusätzliche Module enthielt, die nicht Teil der entsprechenden OpenJDK-Versionen 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 eine konsistente Erfahrung für bestimmte Arten der Legacy-Nutzung bereitzustellen. Diese Module sind entweder jetzt separat als Teil von OpenJFX verfügbar , befinden sich jetzt sowohl in OpenJDK als auch im Oracle JDK, da es sich um kommerzielle Funktionen handelt, die Oracle zu OpenJDK beigetragen hat (z. B. Flight Recorder), oder wurden aus Oracle JDK 11 (z. B. JNLP) entfernt. .

  • Die Ausgabe der Befehle java --version und java -fullversion unterscheidet Oracle JDK-Builds von OpenJDK-Builds, sodass Supportteams eventuell vorhandene 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" 2018-09-25

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 kryptografische Anbieter von Drittanbietern mit einem bekannten Zertifikat signiert sind. Das Kryptografie-Framework in OpenJDK verfügt über eine offene kryptografische Schnittstelle, was nicht einschränkt, welche Anbieter verwendet werden können. Oracle JDK 11 erfordert weiterhin eine gültige Signatur, und Oracle OpenJDK-Builds ermöglichen weiterhin die Verwendung einer gültigen Signatur oder eines nicht signierten Kryptoanbieters eines Drittanbieters.
  • Oracle JDK 11 wird weiterhin Installationsprogramme, Branding und JRE-Pakete enthalten, um eine Erfahrung zu erzielen, die mit älteren Desktop-Anwendungen vereinbar ist. Oracle OpenJDK-Builds sind derzeit als zip- und tar.gz-Dateien verfügbar, während alternative Verteilungsformate in Betracht gezogen werden.
Naresh Joshi
quelle
10

Eine Liste der wenigen verbleibenden Kosmetik- 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

Zusamenfassend:

  • Oracle JDK 11 gibt eine Warnung aus, wenn die Option -XX: + UnlockCommercialFeatures verwendet wird.
  • Es kann so konfiguriert werden, dass Verwendungsprotokolldaten für das Tool „Advanced Management Console“ bereitgestellt werden.
  • Es war immer erforderlich, dass kryptografische Anbieter von Drittanbietern mit einem bekannten Zertifikat signiert sind.
  • Es wird weiterhin Installateure, Branding und JRE-Verpackungen enthalten.
  • während sich der Befehl javac --release für die Java 9- und Java 10-Ziele etwas anders verhält, und
  • Die Ausgabe der Befehle java --version und java -fullversion unterscheidet Oracle JDK-Builds von OpenJDK-Builds.
Dalibor-Thema
quelle
2
Mir ist aufgefallen, dass die meisten Ihrer Antworten eine Unterschrift enthielten. Ich habe sie herausgeschnitten. Bitte lesen Sie Sind Slogans und Signaturen nicht erlaubt? und stackoverflow.com/help/behavior (speziell Abschnitt "Verwenden Sie keine Signatur, Taglines oder Grüße.")
Mark Rotteveel
7
  1. Oracle wird alle drei Jahre Releases liefern, während OpenJDK alle sechs Monate veröffentlicht wird.
  2. Oracle bietet langfristigen Support für seine Releases. Andererseits unterstützt OpenJDK die Ä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 Verknüpfungsausnahme besitzt.
  4. Das Oracle-Produkt verfügt über Flight Recorder-, Java Mission Control- und Application Class-Data-Sharing-Funktionen, während OpenJDK über die Font Renderer-Funktion verfügt. Oracle bietet außerdem 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 erstklassige Unternehmen wie Red Hat, Azul Systems, IBM, Apple Inc. und die SAP AG beteiligen sich aktiv an ihrer Entwicklung.

Von Java 11 zu einer großen Veränderung

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

  • Das Oracle-Kit für Java 11 gibt eine Warnung aus, wenn die Option -XX: + UnlockCommercialFeatures verwendet wird, während diese Option in OpenJDK-Builds zu einem Fehler führt
  • Oracle JDK bietet eine Konfiguration zum Bereitstellen von Verwendungsprotokolldaten für das Tool "Advanced Management Console"
  • Oracle hat immer verlangt, dass kryptografische Anbieter von Drittanbietern von einem bekannten Zertifikat signiert werden, während das Kryptografie-Framework in OpenJDK über eine offene kryptografische Schnittstelle verfügt. Dies bedeutet, dass keine Einschränkung hinsichtlich der Verwendung von Anbietern besteht
  • Oracle JDK 11 wird weiterhin Installationsprogramme, Branding und JRE-Pakete 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 Java 9- und Java 10-Ziele unterschiedlich, da in der Oracle-Version einige zusätzliche Module vorhanden sind
  • Die Ausgabe der Befehle java –version und java -fullversion unterscheidet die Builds von Oracle von den OpenJDK-Builds


Update: 25.08.2019



Geben Sie hier die Bildbeschreibung ein

für mehr Details oracle-vs-openjdk

Istiaque Hossain
quelle
5

Abgesehen von dem offensichtlichen Unterschied in der Lizenzierung 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. Während des 6-monatigen Fensters erhält OpenJDK jedoch nur Sicherheitsupdates, während OracleJDK zusätzliche Stabilitäts- und Leistungsupdates erhält.

Da Update-Releases sowohl für OpenJDK als auch für OracleJDK nur alle 3 Monate veröffentlicht werden, bedeutet dies, dass Sie (höchstens) Korrekturen im Wert von (höchstens) 3 Monaten verpassen, bis die nächste Hauptversion herauskommt und Sie ein Upgrade durchführen. Wenn Sie sich jedoch für LTS-Versionen entscheiden, ist eine kommerzielle Lizenz sinnvoller.

Gili
quelle
3

Auch für Java 8 wurde im November 2018 ein interessanter Leistungsbenchmark für reaktive (nicht blockierende) Spring Boot REST-Anwendungen veröffentlicht, die von AMIS Technology Blog auf verschiedenen JVMs gehostet werden. Dies zeigt unter anderem Folgendes:

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

Einzelheiten finden Sie im Quellartikel.

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

Greg Dubicki
quelle
3

Meines Wissens nach kann Oracle JDK nicht in der Produktion verwendet werden, daher kann ich es nicht legal (ohne Bezahlung) für die Webanwendung verwenden, die ich für mein Unternehmen erstelle. Ich muss OpenJDK verwenden. Bitte korrigieren Sie mich, wenn ich falsch liege! Aus diesem Artikel .

Ab Java 11 ist das Oracle JDK auf Entwicklungs- und Testumgebungen beschränkt. Oracle JDKs dürfen nur in der Produktion verwendet werden, wenn Sie den kommerziellen Support kaufen. Stattdessen wird Oracle kostenlos Java-Builds auf Basis von OpenJDK bereitstellen, die in der Produktion verwendet werden können. Für das offizielle Oracle JDK sieht die eigentliche Roadmap jedoch folgendermaßen aus:

UPDATE: Ich liege falsch. Ich kann Oracle JDK kostenlos verwenden, erhalte aber nach 6 Monaten keine Sicherheitsupdates mehr und wir müssen das Risiko übernehmen. Schauen Sie sich den oben verlinkten Artikelabschnitt "Was bedeutet der neue Release-Zug für mein Unternehmen?" An.

Nettie
quelle
Ab JDK 13 gilt dies möglicherweise nicht mehr. Laut Oracle gibt es eine neue Lizenz für Oracle JDK: "Die neue Lizenz erlaubt bestimmte Verwendungen, wie z. B. den persönlichen Gebrauch und den Entwicklungsgebrauch, kostenlos - aber andere Verwendungen, die unter autorisiert sind frühere Oracle JDK-Lizenzen sind möglicherweise nicht mehr verfügbar ". Siehe oracle.com/downloads/licenses/javase-license1.html .
AL Flanagan
Ich wollte nur wissen, ob die aktuelle Version von oracle jdk8u241 für die Produktion kostenlos ist.
Nirav Shah