1.1. Java Versionen
Seit Java 9 folgt die Weiterentwicklung von Java einem festen Veröffentlichungsrhythmus: Alle sechs Monate erscheint eine neue Java-Version. Dabei wird jedoch nicht jede Version langfristig unterstützt. Es gibt zwei Arten von Java-Versionen:
LTS-Versionen erhalten über mehrere Jahre hinweg Updates (Fehlerbehebungen und Sicherheitsupdates) und eignen sich für produktive Systeme, die Stabilität und langfristige Wartbarkeit benötigen. Bekannte LTS-Versionen sind:
- Java 8 (2014) – lange der De-facto-Standard, heute vor allem in bestehenden Systemen.
- Java 11 (2018) – erstes LTS unter dem sechsmonatigen Release-Zyklus.
- Java 17 (2021) – Vorgänger-LTS, in vielen Produktivsystemen noch im Einsatz.
- Java 21 (2023) – weit verbreitete Vorgänger-LTS.
- Java 25 (2025) – aktuelle LTS-Version, empfohlen für neue Projekte.
Zwischen den LTS-Versionen erscheinen Non-LTS-Versionen, die nur für sechs Monate Updates erhalten. Sie sind vor allem für Entwickler interessant, die frühzeitig neue Features testen oder Feedback geben möchten. Beispiele:
- Java 9, 10, 12–16, 18–20, 22–24
Diese Versionen sind produktiv nutzbar, aber nur kurzfristig unterstützt.
Früher war Java in zwei Hauptvarianten erhältlich:
- JRE (Java Runtime Environment): Enthielt nur das zur Ausführung nötige Runtime-Environment.
- JDK (Java Development Kit): Enthält zusätzlich Compiler, Debugger und Entwicklungswerkzeuge.
Seit Java 9 gibt es mit dem Modul-System (Project Jigsaw) das Tool jlink. Damit lassen sich gezielt schlanke, anwendungsspezifische Laufzeitumgebungen bauen. Zusätzlich kann jpackage vollständige Installationspakete inklusive Java-Runtime erstellen – angepasst an Windows, macOS oder Linux.
Oracle stellt seit JDK 11 keine separate JRE mehr bereit. JDK 9 und 10 hatten noch eigene JRE-Images. Andere Distributoren (etwa Adoptium, Azul oder Linux-Pakete) liefern weiterhin JRE-Pakete.
Die OpenJDK-Implementierung ist die offizielle Referenzimplementierung von Java. Oracle JDK basiert darauf. Der praktische Unterschied liegt vor allem in Lizenz und Support, nicht in der Sprachkompatibilität.
| Merkmal | OpenJDK (verschiedene Builds) | Oracle JDK |
|---|---|---|
| Herkunft | Referenzimplementierung | Build auf OpenJDK-Basis |
| Lizenz | GPLv2 mit Classpath Exception | Oracle No-Fee Terms oder kommerziell |
| Updates | je nach Distributor (Oracle, Eclipse Adoptium, Azul, Amazon, …) | von Oracle gepflegt |
| Support | Community oder Vendor-Support | kommerzieller Support möglich |
| Binary-Kompatibilität | Ja | Ja |
Wer keine kommerzielle Oracle-Unterstützung benötigt, kann auf OpenJDK-Distributionen wie Adoptium, Zulu oder Amazon Corretto zurückgreifen.
| Version | Typ | Veröffentlichungsdatum | Wichtigste Neuerungen |
|---|---|---|---|
| Java 8 | LTS | März 2014 | Lambda-Ausdrücke, Streams, Optional, Date/Time API |
| Java 9 | Non-LTS | Sept 2017 | Modul-System (JPMS), JShell, JLink, G1 als Standard-GC |
| Java 10 | Non-LTS | März 2018 | var für lokale Variablen |
| Java 11 | LTS | Sept 2018 | HttpClient (final), JavaFX aus dem JDK ausgelagert, Flight Recorder |
| Java 12 | Non-LTS | März 2019 | switch-Expressions (Preview) |
| Java 13 | Non-LTS | Sept 2019 | Text Blocks (Preview) |
| Java 14 | Non-LTS | März 2020 | Records (Preview), Pattern Matching für instanceof (Preview), Switch-Expressions (final) |
| Java 15 | Non-LTS | Sept 2020 | Text Blocks (final), Sealed Classes (Preview) |
| Java 16 | Non-LTS | März 2021 | Records und Pattern Matching für instanceof (final) |
| Java 17 | LTS | Sept 2021 | Sealed Classes (final), Pattern Matching für switch (Preview) |
| Java 18 | Non-LTS | März 2022 | Simple Web Server, UTF-8 als Standard-Encoding |
| Java 19 | Non-LTS | Sept 2022 | Virtual Threads (Preview), Structured Concurrency (Preview) |
| Java 20 | Non-LTS | März 2023 | weitere Previews zu Virtual Threads und Pattern Matching |
| Java 21 | LTS | Sept 2023 | Virtual Threads (final), Record Patterns, Sequenced Collections; String Templates nur Preview |
| Java 22 | Non-LTS | März 2024 | FFM-API (final), Stream Gatherers (Preview), Unnamed Patterns (Preview) |
| Java 23 | Non-LTS | Sept 2024 | Markdown in JavaDoc (final), String Templates zurückgezogen, weitere Previews (Gatherers, Modul-Import, Primitive Types in Patterns) |
| Java 24 | Non-LTS | März 2025 | Stream Gatherers und Class-File API (final), Virtual Threads ohne Pinning, Security Manager dauerhaft deaktiviert; Scoped Values / Structured Concurrency weiter Preview |
| Java 25 | LTS | Sept 2025 | Scoped Values, Module-Import, Compact Source Files, Flexible Constructor Bodies (final) |
Empfohlen für neue Projekte ist in der Regel die jeweils aktuelle LTS-Version – derzeit Java 25. Java 21 bleibt eine weit verbreitete Vorgänger-LTS.