Unterschiede zwischen Oracle JDK und OpenJDK

1. Einleitung

In diesem Artikel werden die Unterschiede zwischen Oracle Java Development Kit und OpenJDK untersucht. Wir werden uns zuerst jeden einzelnen kurz ansehen und dann einen Vergleich anstellen. Danach sehen wir eine Liste anderer JDK-Implementierungen.

2. Oracle JDK- und Java SE-Verlauf

JDK (Java Development Kit) ist eine Softwareentwicklungsumgebung, die in der Java-Plattformprogrammierung verwendet wird. Es enthält eine vollständige Java-Laufzeitumgebung, eine sogenannte private Laufzeit. Der Name kam von der Tatsache, dass es mehr Tools als die eigenständige JRE sowie die anderen Komponenten enthält, die für die Entwicklung von Java-Anwendungen benötigt werden.

Oracle empfiehlt dringend, den Begriff JDK für das Java SE (Standard Edition) Development Kit zu verwenden (es gibt auch Enterprise Edition- und Micro Edition-Plattformen).

Werfen wir einen Blick auf die Java SE-Geschichte:

  • JDK Beta - 1995
  • JDK 1.0 - Januar 1996
  • JDK 1.1 - Februar 1997
  • J2SE 1.2 - Dezember 1998
  • J2SE 1.3 - Mai 2000
  • J2SE 1.4 - Februar 2002
  • J2SE 5.0 - September 2004
  • Java SE 6 - Dezember 2006
  • Java SE 7 - Juli 2011
  • Java SE 8 (LTS) - März 2014
  • Java SE 9 - September 2017
  • Java SE 10 (18.3) - März 2018
  • Java SE 11 (18,9 LTS) - September 2018
  • Java SE 12 (19.3) - März 2019

Hinweis: Die kursiven Versionen werden nicht mehr unterstützt.

Wir können sehen, dass die Hauptversionen von Java SE ungefähr alle zwei Jahre bis Java SE 7 kamen. Es dauerte fünf Jahre, um von Java SE 6 zu wechseln, und drei weitere Jahre, um Java SE 8 danach zu erreichen.

Seit Java SE 10 können wir alle sechs Monate mit neuen Versionen rechnen. Es werden jedoch nicht alle Releases die Long-Term-Support-Releases (LTS) sein. Aufgrund des Release-Plans von Oracle werden die LTS-Produktversionen nur alle drei Jahre veröffentlicht.

Java SE 11 ist die neueste LTS-Version, und Java SE 8 wird bis Dezember 2020 kostenlose öffentliche Updates für nichtkommerzielle Zwecke erhalten.

Dieses Entwicklungskit erhielt seinen aktuellen Namen, nachdem Oracle 2010 Sun Microsystems gekauft hatte. Davor hieß es SUN JDK und war die offizielle Implementierung der Programmiersprache Java.

3. OpenJDK

OpenJDK ist eine kostenlose Open-Source-Implementierung der Java SE Platform Edition. Es wurde ursprünglich im Jahr 2007 als Ergebnis der Entwicklung veröffentlicht, die Sun Microsystems im Jahr 2006 gestartet hat.

Natürlich sollten wir betonen, dass das OpenJDK eine offizielle Referenzimplementierung einer Java Standard Edition seit Version SE 7 ist .

Ursprünglich basierte es nur auf dem JDK 7. Seit Java 10 liegt die Verantwortung für die Open-Source-Referenzimplementierung der Java SE-Plattform beim JDK-Projekt . Und genau wie bei Oracle wird auch das JDK-Projekt alle sechs Monate neue Feature-Releases bereitstellen.

Wir sollten beachten, dass es vor diesem langjährigen Projekt JDK-Release-Projekte gab, die eine Funktion veröffentlichten und dann eingestellt wurden.

Schauen wir uns jetzt die OpenJDK-Versionen an:

  • OpenJDK 6-Projekt - basiert auf JDK 7, wurde jedoch geändert, um eine Open-Source-Version von Java 6 bereitzustellen
  • OpenJDK 7-Projekt - 28. Juli 2011
  • OpenJDK 7u-Projekt - Dieses Projekt entwickelt Updates für Java Development Kit 7
  • OpenJDK 8-Projekt - 18. März 2014
  • OpenJDK 8u-Projekt - Dieses Projekt entwickelt Updates für Java Development Kit 8
  • OpenJDK 9-Projekt - 21. September 2017
  • Veröffentlichung des JDK-Projekts vom 10. bis 20. März 2018
  • Veröffentlichung des JDK-Projekts vom 11. bis 25. September 2018
  • JDK-Projekt Release 12 - Stabilisierungsphase

4. Oracle JDK vs. OpenJDK

In diesem Abschnitt konzentrieren wir uns auf die wichtigsten Unterschiede zwischen Oracle JDK und OpenJDK.

4.1. Release-Zeitplan

Wie bereits erwähnt, wird Oracle alle drei Jahre Releases bereitstellen , während OpenJDK alle sechs Monate veröffentlicht wird .

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.

4.2. Lizenzen

Oracle JDK wurde unter der Oracle Binary Code-Lizenzvereinbarung lizenziert , während OpenJDK die GNU General Public License (GNU GPL) Version 2 mit einer Verknüpfungsausnahme besitzt .

Bei Verwendung der Oracle-Plattform gibt es einige Auswirkungen auf die Lizenzierung. Öffentliche Updates für Oracle Java SE 8, die nach Januar 2019 veröffentlicht wurden, sind ohne kommerzielle Lizenz nicht für geschäftliche, kommerzielle oder produktive Zwecke verfügbar, wie Oracle angekündigt hat. OpenJDK ist jedoch vollständig Open Source und kann frei verwendet werden.

4.3. Performance

Es gibt keinen wirklichen technischen Unterschied zwischen den beiden, da der Erstellungsprozess für das Oracle JDK auf dem von OpenJDK basiert .

Wenn es um Leistung geht, ist Oracle in Bezug auf Reaktionsfähigkeit und JVM-Leistung viel besser . Aufgrund der Bedeutung, die es seinen Unternehmenskunden beimisst, wird mehr Wert auf Stabilität gelegt.

OpenJDK liefert dagegen häufiger Releases. Infolgedessen können Probleme mit der Instabilität auftreten. Aufgrund des Community-Feedbacks wissen wir, dass einige OpenJDK-Benutzer auf Leistungsprobleme gestoßen sind.

4.4. Eigenschaften

Wenn wir Funktionen und Optionen vergleichen, werden wir feststellen, dass das Oracle-Produkt über Flight Recorder-, Java Mission Control- und Application Class-Data-Sharing- Funktionen verfügt , während OpenJDK über die Font Renderer-Funktion verfügt .

Außerdem bietet Oracle mehr Garbage Collection-Optionen und bessere Renderer.

4.5. Entwicklung und Popularität

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.

Wie wir dem Link aus dem vorherigen Unterabschnitt entnehmen können, war das Oracle JDK früher bevorzugter, wenn es um die Beliebtheit bei den Top-Unternehmen geht, die Java Development Kits in ihren Tools wie Android Studio oder IntelliJ IDEA verwenden, aber beides Einige von ihnen haben auf OpenJDK-basierte JetBrains-Builds umgestellt.

Auf der anderen Seite bieten große Linux-Distributionen (Fedora, Ubuntu, Red Hat Enterprise Linux) OpenJDK als Standard-Java SE-Implementierung.

5. Änderungen seit Java 11

Wie wir im Oracle-Blogbeitrag sehen können, gibt es einige wichtige Änderungen, die mit Java 11 beginnen.

Zunächst wird Oracle seine historische "BCL" -Lizenz durch eine Kombination aus einer Open Source GNU General Public License v2 mit der Classpath Exception (GPLv2 + CPE) und einer kommerziellen Lizenz ändern, wenn das Oracle JDK als Teil eines Oracle-Produkts oder verwendet wird Service oder wenn Open Source Software nicht erwünscht ist.

Jede Lizenz hat unterschiedliche Builds, aber diese sind funktional identisch mit nur einigen kosmetischen und Verpackungsunterschieden.

Außerdem sind in OpenJDK jetzt traditionell „kommerzielle Funktionen“ wie Flight Recorder, Java Mission Control und Application Class-Data Sharing sowie der Z Garbage Collector verfügbar. Daher sind Oracle JDK- und OpenJDK-Builds ab Java 11 im Wesentlichen identisch .

Schauen wir uns die Hauptunterschiede an:

  • 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 Nutzungsprotokolldaten 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 Installateure enthalten, Branding und JRE Verpackung, während OpenJDK sind baut derzeit als zip und tar.gz - Dateien
  • 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

6. Andere JDK-Implementierungen

Lassen Sie uns nun einen kurzen Blick auf andere aktive Java Development Kit-Implementierungen werfen.

6.1. Kostenlos und Open Source

Die folgenden Implementierungen, die in alphabetischer Reihenfolge aufgeführt sind, sind Open Source und können kostenlos verwendet werden:

  • AdoptOpenJDK
  • Amazon Corretto
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Codename Eins
  • DoppioJVM
  • Eclipse OpenJ9
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Jamiga
  • JamVM
  • Jelatine JVM
  • Jikes RVM (Jikes Research Virtual Machine)
  • JVM.go
  • leJOS
  • Maxine
  • Multi-OS-Engine
  • RopeVM
  • uJVM

6.2. Proprietäre Implementierungen

Es gibt auch urheberrechtlich geschützte Implementierungen:

  • Azul Zing JVM
  • CEE-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T - Industrial Smart Software Technology)
  • ABl
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM für Java

Zusammen mit den oben aufgeführten aktiven Implementierungen sehen wir die Liste der inaktiven Implementierungen und eine kurze Beschreibung jeder Implementierung.

7. Fazit

In diesem Artikel haben wir uns auf die beiden beliebtesten Java Development Kits konzentriert.

Wir haben zuerst jeden von ihnen beschrieben und dann die bemerkenswertesten Unterschiede zwischen diesen hervorgehoben. Dann haben wir den Änderungen und Unterschieden seit Java 11 besondere Aufmerksamkeit geschenkt. Schließlich haben wir andere aktive Implementierungen aufgelistet, die heute verfügbar sind.