Unterschied zwischen JVMs?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Es handelt sich um JDKs, die von unterschiedlichen Parteien (Amazon, IBM, Oracle, Red Hat, Zulu, ...) betreut und gewartet (dazu gehören auch Tests) werden.

Einige bieten kommerziellen Support an (z.B. Zulu oder Oracle JDK) oder sind im produktiven Einsatz nicht kostenlos nutzbar (z.B. OracleJDK für Java 8-16). Andere kannst du komplett kostenlos einsetzen (z.B. AdoptOpenJDK).

Es gibt Unterschiede in der Dauer, wie lange Main Releases (wie Java 11, 12, ...) noch weiter unterstützt (also z.B. mit Sicherheitsupdates versorgt) werden. Bellsoft oder Zulu bieten z.B. einen längeren (kommerziellen) Support als Oracle, der zwischen 2-4 Jahren liegt. Ebenso entscheiden die Anbieter selbst, ob sie bei notwendigen, kritischen Bugs sofort eine neue Version herausbringen (das wäre gerade bei kommerziellen Builds der Fall) oder erst auf einen Fix im Hauptstrang des OpenJDK warten. Für genaue Daten solltest du nach der JDK Roadmap auf den jeweiligen Unternehmenswebseiten suchen.

Zuzüglich kann ein JDK um Funktionen erweitert werden. Beispielsweise die Möglichkeit der AOT-Kompilierung (wie sie mit der GraalVM von Oracle möglich ist) oder eine modifizierte Implementation des GC, die sich gerade auf Plattformen eignet, bei denen es auf eine starke Performance ankommt. Das IBM JDK verwendet z.B. die OpenJ9 VM (eine Eigenentwicklung von IBM, inzwischen ist es ein Eclipse Open Source-Projekt), während andere auf die Hotspot VM setzen. Bellsoft und Zulu bündeln zusätzlich OpenJFX. Für einige Versionen ist auch die Integration entfernter Packages oder die Integration bestimmter Tools (z.B. des Flight Recorder - einem Profiling Tool für die JVM) interessant.

Funktional gilt hierbei aber auch: Alle diese Builds nutzen dieselbe Basisquelle (das OpenJDK). Hierbei handelt es sich nur um den reinen Quellcode, der von den Anbietern dann entsprechend gebaut wird. Das heißt, eine Java-Anwendung, die sich auch an die allgemeinen Java Spezifikationen hält (und generell lauffähig ist), wird in jedem Fall ausführbar sein.

Zur Prüfung der Builds wird ein Zertifizierungstool verwendet, welches den Build als Java SE-kompatibel kennzeichnet. Die Builds von Amazon, Bellsoft, Zulu, Red Hat / IBM, SAP und Adoptium (dieses Eclipse Projekt ersetzt seit Mitte 2021 das AdoptOpenJDK-Projekt, welches zuletzt als nicht SE-kompatibel gewertet wurde) erfüllen diese Anforderung. Das JDK von Oracle natürlich sowieso, zumal Oracle erst über das Recht verfügt, Lizenzen an Builds zu verteilen, damit sie sich auch als tatsächliche Java SE betiteln dürfen.

Sofern du als Hobbyentwickler nach einem kostenlosen JDK schaust, würde ich dir Adoptium oder Corretto empfehlen. Ab Java 17 wird auch Oracle wieder einen kostenlosen Build für produktive Systeme zur Verfügung stellen. Die Versionen davor (8-16) waren es nicht.

Bellsoft, SAP, Zulu und die kommerziellen Versionen des OracleJDK lohnen sich eher für Projekte mit speziellen Anforderungen, was dann auch eher im produktiven / kommerziellen Sektor zu verorten ist.