1.6 Java SE-Implementierungen
Die Java SE-Plattform ist im Grunde nur eine Spezifikation und keine Implementierung. Damit Programme übersetzt und ausgeführt werden können, brauchen wir einen konkreten Compiler, eine Laufzeitumgebung und eine Implementierung der Bibliotheken. Es gibt unterschiedliche Implementierungen verschiedener Hersteller. Bestehen die Implementierungen eine Reihe von Tests, die Technology Compatibility Kit (TCK) genannt wird, dürfen sie sich »Java SE compatible« nennen.
1.6.1 OpenJDK
Das freie und unter der GPL stehende OpenJDK (https://openjdk.java.net) bildet die Referenzimplementierung für Java SE. Alle Entwicklungen finden dort statt. Der Fortschritt ist live zu beobachten, regelmäßig fixen und erweitern Hunderte von Entwicklern die Codebasis. Die Quellen für das OpenJDK lassen sich im GitHub-Repository unter https://github.com/openjdk/jdk einsehen. Viele Technologien, die Oracle vorher nur im Oracle JDK hatte, wurden in das OpenJDK übertragen, etwa Java Flight Recorder, Java Mission Control, Application Class-Data Sharing und ZGC (Zero-Garbage-Collector).
Binary Referenzimplementierung
Ausführbare Dateien der Java SE-Referenzimplementierungen sind unter https://jdk.java.net/ verlinkt. https://jdk.java.net/17/ listet Java 17-Implementierungen für die Systeme Linux/AArch64, Linux/x64, macOS/AArch64, macOS/x64und Windows/x64 auf. Die Produkte stehen unter der GNU General Public License v2 mit der Classpath Exception[ 42 ](https://openjdk.java.net/legal/gplv2+ce.html). Ein alternativer Name für die Referenzimplementierungen ist Oracle OpenJDK. Oracle selbst hat angekündigt, bei neuen Java-Versionen keine Updates mehr für die alten Versionen zu veröffentlichen.
OpenJDK-Builds von Eclipse
Eclipse Adoptium (ehemals AdoptOpenJDK) (https://adoptium.net/) veröffentlicht regelmäßig Builds vom OpenJDK, integriert weitere Pakete wie die JavaFX-Implementierung OpenJFX und bindet alternative Laufzeitumgebungen wie Eclipse OpenJ9 ein. Es ist angekündigt, dass auch ältere Versionen mit Bugfixes versorgt werden. Zu den Unterstützern zählen Amazon, IBM/Red Hat, Microsoft, Pivotal und viele weitere. Für Java 8 und Java 11 ist Adoptium eine sehr gute Wahl.
Von der Website lässt sich für unterschiedliche Betriebssysteme eine Version herunterladen. Adoptium zählt aktuell zu den populärsten OpenJDK-Distributionen.
Weitere OpenJDK-Builds
Das Unternehmen Azul bietet Builds unter dem Namen Zulu an, auch lässt sich ein Support-Vertrag abschließen: https://www.azul.com/downloads/?package=jdk. Neben den Plattformen Windows, Linux und macOS gibt es von Azul ebenfalls Docker-Images.
Die Red Hat build of OpenJDK bieten neben Linux auch eine Windows-Version des OpenJDK an: https://developers.redhat.com/products/openjdk/overview. Die Integration in Linux ist sehr gut, und Red Hat pflegt auch noch Sicherheitsupdates für ältere Java-Versionen ein.
SAP bietet mit der SapMachine (https://sap.github.io/SapMachine) Builds für diverse Betriebssysteme und auch ein Docker-Image.
Amazon Corretto (https://aws.amazon.com/de/corretto) wird intern von Amazon in der Cloud eingesetzt und ist kostenlos.
Alibaba Dragonwell (http://github.com/alibaba/dragonwell8 und https://github.com/alibaba/dragonwell11) sind vom OpenJDK abgeleitete Implementierungen von Alibaba. Zur Zeit wird nur Linux unterstützt.
Von BellSoft gibt es das Liberica JDK (https://bell-sw.com) für eine große Anzahl verschiedener Plattformen. Es gibt mit VMware eine Kooperation für Spring Native Applications.
Apple pflegte lange Zeit eine komplett eigene JVM, bis Apple den Code an Oracle für das OpenJDK übergab. Auch Google setzt bei Android neuerdings auf das OpenJDK.
1.6.2 Oracle JDK
Es ist ein bisschen verwirrend, dass Oracle auf der einen Seite die Referenzimplementierung anbietet und auf der anderen Seite noch eine andere Distribution, das Oracle JDK. Das Oracle JDK ist die »offizielle« Version, die die Java-Download-Seite von Oracle anbietet. Wenige kleine Unterschiede sind die Paketierung (das Oracle JDK hat einen Installer, das Oracle OpenJDK ist nur ein ZIP), die Versionskennung und ein paar weitere Module.[ 43 ](https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later) Das Oracle JDK steht unter der Oracle No-Fee Lizenz und kann privat wie auch kommerziell eingesetzt werden. Oracle verspricht Updates der Version bis mindestens September 2024.
Long-Term Support (LTS)
Die halbjährlichen Java-Releases haben zur Folge, dass Versionen immer dann veraltet sind, wenn eine neue Version erscheint. Für Unternehmen ist das ein Problem, denn es erzeugt Stress, mit den Änderungen mitziehen zu müssen. Aus diesem Grund bietet Oracle eine Java-Version mit Long Term Support (LTS) und versorgt sie mit Updates und Sicherheitspatches. Die LTS-Versionen nach Java 8 waren Java 11 (September 2018) und aktuell Java 17 (September 2021). Das ist für weniger agile Unternehmen gut. Oracle will seine Java SE 8-Implementierung noch viele Jahre pflegen. Es ist geplant, den LTS-Zyklus von drei Jahren auf zwei Jahre zu verkürzen.
Oracle Java SE Subscription
Unternehmen möchten sich oft absichern, und daher bietet Oracle eine Java SE Subscription an. Damit bietet Oracle kommerzielle Unterstützung, falls es Probleme oder Fehler im Produktivbetrieb gibt. Die Kosten können sich schnell summieren, doch bekommen Unternehmen damit Support und insbesondere für die ältere Version Java 8 noch für einige Jahre Unterstützung. Der Nachteil ist, dass es das Subscription-Modell nur für die LTS-Versionen gibt, Unternehmen also gezwungen werden, größere Versionssprünge zu machen, wenn sie den Support wünschen. Andere Unternehmen wie Azul sind günstiger und bieten auch Support für Nicht-LTS-Versionen.
Oracle Certified System Configurations
Eine ideale, perfekt getestete und unterstützte Umgebung gilt als Oracle Certified System Configuration. Das ist eine Kombination aus Betriebssystem mit installierten Service-Packs; die Details beschreibt das Unternehmen auf seiner Webseite, auch für alle vorherigen Versionen.[ 44 ](https://www.oracle.com/java/technologies/javase/products-doc-jdk17certconfig.html) Unterstützt werden nur noch 64-Bit-Betriebssysteme; 32-Bit-Systeme sind raus.
Wenn man Bugs auf nicht zertifizierten Plattformen meldet, kann schnell ein »Sorry, das ist eine nicht unterstützte Plattform, das schauen wir uns nicht weiter an« folgen. Bei Linux ist zum Beispiel die Gentoo-Distribution nicht in der Liste, sie wäre also »Not certified on Oracle VM«. Das heißt nicht, dass Java dort nicht zu 100 % läuft, sondern nur, dass es im Fehlerfall eben keinen Fix geben muss. Auch Solaris SPARC gehört nicht mehr zu den zertifizierten Plattformen.