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?
java
difference
user1340582
quelle
quelle
Antworten:
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
quelle
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 :
quelle
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.
Quelle: https://www.oracle.com/java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events
quelle
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.
Eine vollständige Liste der Unterschiede finden Sie im Quellartikel: Oracle JDK vs OpenJDK und Java JDK Development Process
quelle
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.
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):
quelle
diff
?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.
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. .
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)
quelle
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:
quelle
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
Update: 25.08.2019
für mehr Details oracle-vs-openjdk
quelle
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.
quelle
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:
Einzelheiten finden Sie im Quellartikel.
Natürlich YMMV, dies ist nur einer der Benchmarks.
quelle
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 .
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.
quelle