Java 17, 21 oder 25: welche LTS-Version euer Projekt die nächsten Jahre trägt
Drei Zahlen, drei Ablauftermine, drei sehr unterschiedliche Migrationsaufwände. Die Entscheidung hängt an eurem heutigen Stand und an der Frage, wessen JDK auf euren Servern läuft.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Die Version steht nicht zur Debatte, bis sie plötzlich doch zur Debatte steht
Der Ablauf wiederholt sich in fast jedem Haus. Eine Anwendung läuft seit Jahren, niemand hat einen Grund, an der Laufzeitumgebung zu drehen, und die Java-Version steht in keinem Fahrplan. Dann kommt der Anlass von außen: Eine Bibliothek zieht ihre Mindestversion hoch, ein Sicherheitshinweis lässt sich nur mit einem Update schließen, das eine neuere Laufzeit verlangt, oder der Einkauf fragt nach, warum eine Rechnung für Java im Haus liegt. Ab diesem Moment ist der Wechsel kein Projekt mehr, sondern ein Termin, und Termine sind der schlechteste Rahmen für eine Entscheidung, die vier Jahre halten soll.
Die häufigste Verwechslung dabei sind zwei Fragen, die zusammen gestellt und getrennt beantwortet werden müssten. Die eine lautet: Welche Sprachversion und welche Klassenbibliothek braucht unser Code? Die andere: Wessen Build dieser Version läuft auf unseren Servern, und zu welchen Bedingungen? Die erste Frage entscheidet über den Umbauaufwand im Code, die zweite über Support, Kosten und darüber, wie lange ihr Sicherheitsupdates bekommt. Wer beide zusammenwirft, landet bei Aussagen wie "Java 17 ist nicht mehr kostenlos", die je nach Distribution schlicht falsch sind.
Der dritte Fehler ist der zu kleine Sprung. Ein Team, das 2026 aus einem Java-8-Bestand heraus auf 17 geht, hat den kompletten Umbau einmal bezahlt: Module, jakarta-Namensraum, Bibliotheksversionen, Build-Werkzeuge. Und steht danach auf einer Version, deren Premier Support bei Oracle im September 2026 endet und für die es bei Oracle seit Oktober 2024 keine kostenfreien Updates mehr gibt. Der zusätzliche Weg von 17 auf 21 ist gegenüber diesem Umbau klein. Ihn beim ersten Anlauf mitzunehmen, ist fast immer billiger, als ihn zwei Jahre später erneut zu planen.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Die drei Versionen an den Kriterien, die im Betrieb wirken
Verglichen werden hier nicht Sprachfeatures, sondern die sechs Punkte, die eine Entscheidung über Jahre teuer oder billig machen: wie lange es Updates gibt, wie groß der Umbau ist, was die Werkzeuge mitmachen, was die Version im Betrieb bringt, wie belastbar Virtual Threads sind und wie hoch das Risiko ist, dass beim Sprung etwas ausfällt.
Java 17
LTS seit September 2021, Premier Support bei Oracle bis September 2026, beim Oracle JDK seit Oktober 2024 nur noch unter OTN-Lizenz
Java 21
LTS seit September 2023, erste Fassung mit fertigen Virtual Threads, Oracle JDK kostenfrei nutzbar bis September 2026
Java 25
LTS seit September 2025, Premier Support bis September 2030, Oracle JDK nach heutiger Planung kostenfrei nutzbar bis September 2028
| Entscheidungsfrage | Java 17 | Java 21 | Java 25 |
|---|---|---|---|
| Wie lange bekommt ihr Sicherheitsupdates, ohne dafür etwas zu kaufen? | Kommt darauf an Beim Oracle JDK ist die kostenfreie Phase seit Oktober 2024 vorbei. Freie Distributionen tragen die Version dagegen weiter: Eclipse Temurin sagt Builds mindestens bis Oktober 2027 zu, Amazon Corretto nennt für Corretto 17 den 31. Oktober 2029. | Stärke Oracle stellt die Updates für JDK 21 im September 2026 auf die OTN-Lizenz um. Bei den freien Builds sieht es entspannter aus: Temurin nennt für Java 21 mindestens Dezember 2029, Corretto den 31. Oktober 2030. | Stärke Das Oracle JDK 25 bleibt nach heutiger Planung bis September 2028 unter der No-Fee-Lizenz, also ein Jahr über die für September 2027 geplante Java 29 hinaus. Temurin nennt mindestens September 2031, Corretto den 31. Oktober 2032. |
| Wie groß ist der Umbau, wenn ihr heute auf Java 8 oder 11 steht? | Stärke Der kleinste der drei Sprünge, aber nicht der billigste, weil er den großen Brocken trotzdem enthält: die mit JDK 11 entfernten Java-EE-Module und die seit JDK 16 durchgesetzte starke Kapselung der JDK-Interna. | Kommt darauf an Gegenüber 17 kommt wenig Neues an Bruchstellen hinzu. Wer den Weg von 8 auf 17 ohnehin geht, zahlt für die vier zusätzlichen Versionen einen überschaubaren Aufschlag, meist in Form neuerer Bibliotheks- und Plugin-Versionen. | Kommt darauf an Der Aufschlag gegenüber 21 liegt fast vollständig bei den Änderungen aus JDK 24 und 25, also beim abgeschalteten Security Manager, bei sun.misc.Unsafe und beim entfernten 32-Bit-Port. Für reinen Anwendungscode ändert sich meist nichts. |
| Machen eure Build-Werkzeuge die Version ohne eigenes Projekt mit? | Stärke Gradle unterstützt das Ausführen auf Java 17 seit Version 7.3, und jede halbwegs gepflegte Maven-Installation kommt damit zurecht. Hier stolpert praktisch niemand mehr. | Stärke Gradle braucht mindestens 8.5, um selbst auf Java 21 zu laufen. Das ist für die meisten Projekte ein Versionssprung im Wrapper und keine Umstellung der Build-Logik. | Kommt darauf an Gradle verlangt mindestens 9.1.0, und der Weg von der 8er- auf die 9er-Reihe bringt eigene Anpassungen mit. Maven bleibt bei 3.9.16 als aktueller GA-Fassung, denn Maven 4 steht mit 4.0.0-rc-6 noch vor der Freigabe. |
| Was bringt die Version im laufenden Betrieb, das die vorherige nicht kann? | Schwäche Im Vergleich zu den beiden anderen bringt 17 nichts mit, was den Betrieb spürbar entlastet. Wer heute auf 17 geht, kauft Stabilität und Kompatibilität, nicht Leistung. | Stärke Virtual Threads sind hier fertig geworden, und der Z Garbage Collector hat mit dieser Version seinen generationalen Modus bekommen. Beides wirkt unmittelbar auf Durchsatz und Pausenzeiten. | Stärke Compact Object Headers sind vom Versuchsstadium zum Produktmerkmal geworden. Sie sind nicht die Vorgabe, lassen sich aber einschalten und drücken bei objektreichen Anwendungen den belegten Heap. Dazu kommen Ahead-of-Time-Profile, mit denen eine Anwendung nach dem Start schneller ihre volle Geschwindigkeit erreicht. |
| Wie belastbar sind Virtual Threads mit bestehenden Bibliotheken? | Schwäche Gibt es dort nicht. Wer diese Programmierweise braucht, muss die Version wechseln, es gibt keinen Backport. | Kommt darauf an Fertig und benutzbar, aber mit einer Einschränkung, die im Betrieb weh tut: Blockiert ein virtueller Thread in einer synchronized-Methode, bleibt er an seinen Trägerthread gebunden und blockiert damit fremde Aufgaben mit. | Stärke Seit JDK 24 geben virtuelle Threads ihren Trägerthread auch aus synchronized-Blöcken heraus frei. Damit skalieren ältere Bibliotheken mit, ohne dass sie jemand auf ReentrantLock umschreiben muss. |
| Wie hoch ist das Risiko, dass beim Sprung etwas ausfällt, das ihr heute noch nutzt? | Stärke Der Security Manager ist hier zwar zur Entfernung markiert, funktioniert aber noch. Wer aus einem alten Bestand kommt, in dem Sicherheitsrichtlinien über diesen Weg gesetzt werden, kommt vorerst durch. | Kommt darauf an Der Security Manager läuft noch, meldet sich aber. Ansonsten ist der Abstand zu 17 an dieser Stelle klein, und die meisten Bibliotheken sind längst geprüft. | Schwäche Hier kommen die harten Schnitte zusammen: Der Security Manager lässt sich seit JDK 24 nicht mehr einschalten, die Speicherzugriffe in sun.misc.Unsafe warnen zur Laufzeit, und der 32-Bit-x86-Port ist entfernt. Das trifft selten den eigenen Code und regelmäßig ältere Agenten und Treiber. |
Wie lange bekommt ihr Sicherheitsupdates, ohne dafür etwas zu kaufen?
Beim Oracle JDK ist die kostenfreie Phase seit Oktober 2024 vorbei. Freie Distributionen tragen die Version dagegen weiter: Eclipse Temurin sagt Builds mindestens bis Oktober 2027 zu, Amazon Corretto nennt für Corretto 17 den 31. Oktober 2029.
Oracle stellt die Updates für JDK 21 im September 2026 auf die OTN-Lizenz um. Bei den freien Builds sieht es entspannter aus: Temurin nennt für Java 21 mindestens Dezember 2029, Corretto den 31. Oktober 2030.
Das Oracle JDK 25 bleibt nach heutiger Planung bis September 2028 unter der No-Fee-Lizenz, also ein Jahr über die für September 2027 geplante Java 29 hinaus. Temurin nennt mindestens September 2031, Corretto den 31. Oktober 2032.
Wie groß ist der Umbau, wenn ihr heute auf Java 8 oder 11 steht?
Der kleinste der drei Sprünge, aber nicht der billigste, weil er den großen Brocken trotzdem enthält: die mit JDK 11 entfernten Java-EE-Module und die seit JDK 16 durchgesetzte starke Kapselung der JDK-Interna.
Gegenüber 17 kommt wenig Neues an Bruchstellen hinzu. Wer den Weg von 8 auf 17 ohnehin geht, zahlt für die vier zusätzlichen Versionen einen überschaubaren Aufschlag, meist in Form neuerer Bibliotheks- und Plugin-Versionen.
Der Aufschlag gegenüber 21 liegt fast vollständig bei den Änderungen aus JDK 24 und 25, also beim abgeschalteten Security Manager, bei sun.misc.Unsafe und beim entfernten 32-Bit-Port. Für reinen Anwendungscode ändert sich meist nichts.
Machen eure Build-Werkzeuge die Version ohne eigenes Projekt mit?
Gradle unterstützt das Ausführen auf Java 17 seit Version 7.3, und jede halbwegs gepflegte Maven-Installation kommt damit zurecht. Hier stolpert praktisch niemand mehr.
Gradle braucht mindestens 8.5, um selbst auf Java 21 zu laufen. Das ist für die meisten Projekte ein Versionssprung im Wrapper und keine Umstellung der Build-Logik.
Gradle verlangt mindestens 9.1.0, und der Weg von der 8er- auf die 9er-Reihe bringt eigene Anpassungen mit. Maven bleibt bei 3.9.16 als aktueller GA-Fassung, denn Maven 4 steht mit 4.0.0-rc-6 noch vor der Freigabe.
Was bringt die Version im laufenden Betrieb, das die vorherige nicht kann?
Im Vergleich zu den beiden anderen bringt 17 nichts mit, was den Betrieb spürbar entlastet. Wer heute auf 17 geht, kauft Stabilität und Kompatibilität, nicht Leistung.
Virtual Threads sind hier fertig geworden, und der Z Garbage Collector hat mit dieser Version seinen generationalen Modus bekommen. Beides wirkt unmittelbar auf Durchsatz und Pausenzeiten.
Compact Object Headers sind vom Versuchsstadium zum Produktmerkmal geworden. Sie sind nicht die Vorgabe, lassen sich aber einschalten und drücken bei objektreichen Anwendungen den belegten Heap. Dazu kommen Ahead-of-Time-Profile, mit denen eine Anwendung nach dem Start schneller ihre volle Geschwindigkeit erreicht.
Wie belastbar sind Virtual Threads mit bestehenden Bibliotheken?
Gibt es dort nicht. Wer diese Programmierweise braucht, muss die Version wechseln, es gibt keinen Backport.
Fertig und benutzbar, aber mit einer Einschränkung, die im Betrieb weh tut: Blockiert ein virtueller Thread in einer synchronized-Methode, bleibt er an seinen Trägerthread gebunden und blockiert damit fremde Aufgaben mit.
Seit JDK 24 geben virtuelle Threads ihren Trägerthread auch aus synchronized-Blöcken heraus frei. Damit skalieren ältere Bibliotheken mit, ohne dass sie jemand auf ReentrantLock umschreiben muss.
Wie hoch ist das Risiko, dass beim Sprung etwas ausfällt, das ihr heute noch nutzt?
Der Security Manager ist hier zwar zur Entfernung markiert, funktioniert aber noch. Wer aus einem alten Bestand kommt, in dem Sicherheitsrichtlinien über diesen Weg gesetzt werden, kommt vorerst durch.
Der Security Manager läuft noch, meldet sich aber. Ansonsten ist der Abstand zu 17 an dieser Stelle klein, und die meisten Bibliotheken sind längst geprüft.
Hier kommen die harten Schnitte zusammen: Der Security Manager lässt sich seit JDK 24 nicht mehr einschalten, die Speicherzugriffe in sun.misc.Unsafe warnen zur Laufzeit, und der 32-Bit-x86-Port ist entfernt. Das trifft selten den eigenen Code und regelmäßig ältere Agenten und Treiber.
Was passt wann
- Wenn ihr aus einem Java-8- oder Java-11-Bestand kommt und den Umbau ohnehin bezahlt
- geh gleich auf 21 und nimm 17 nur als Zwischenstation, wenn eine Bibliothek euch dazu zwingt.
- Wenn ihr auf 21 steht, ein Oracle JDK einsetzt und keinen Vertrag habt
- plan den Wechsel auf 25 jetzt, denn ab September 2026 kommen die JDK-21-Updates von Oracle nur noch unter der OTN-Lizenz.
- Wenn ihr auf 21 steht und Temurin, Corretto oder eine andere freie Distribution nutzt
- habt ihr bis mindestens 2029 Ruhe und entscheidet den Sprung auf 25 nach fachlichem Nutzen statt nach Terminen.
- Wenn Virtual Threads der Grund für den Wechsel sind
- nimm 25, weil erst die Änderungen aus JDK 24 die Bindung an den Trägerthread in synchronized-Blöcken aufheben.
Vier Fragen, und die Zahl steht fest
- 01 Auf welcher Version steht ihr heute? Aus 8 oder 11 heraus lohnt der weite Sprung.
- 02 Läuft ein Oracle JDK oder eine freie Distribution? Nur beim Oracle JDK zählt der Lizenztermin.
- 03 Hängt eure Begründung an Virtual Threads? Dann ist 25 die Version, nicht 21.
- 04 Stecken Security Manager, sun.misc.Unsafe oder ein 32-Bit-Ziel im Bestand?
- 05 Machen Gradle, Maven und eure Agenten den Sprung mit, oder müssen sie zuerst dran?
Was du prüfst, bevor die Zahl feststeht
Die Entscheidung hängt an sechs Punkten, die alle in wenigen Stunden zu klären sind. Fünf davon liest du in Dokumentation und Build-Dateien nach, für den sechsten brauchst du einen Testlauf auf der neuen Version. Danach ist die Diskussion in der Regel beendet.
Den echten Ablauftermin nachschlagen, nicht den erinnerten
Oracle führt für jede Version die Termine für Premier und Extended Support in einer einzigen Tabelle. Für Java 17 endet Premier Support im September 2026, für Java 21 im September 2028, für Java 25 im September 2030. Die nächste LTS ist nach Oracles Planung Java 29 im September 2027. Wer eine dieser Zahlen aus dem Gedächtnis zitiert, liegt erfahrungsgemäß um Jahre daneben.
Klären, wessen JDK tatsächlich läuft
Die Lizenzfrage betrifft ausschließlich das Oracle JDK. Für Oracle JDK 17 gilt seit Oktober 2024 die OTN-Lizenz, die Produktivbetrieb nicht abdeckt. Oracle JDK 21 steht bis September 2026 unter der No-Fee Terms and Conditions License, danach ebenfalls unter OTN. Oracle JDK 25 bleibt nach heutiger Planung bis September 2028 kostenfrei nutzbar. Läuft bei euch Temurin, Corretto oder eine andere OpenJDK-Distribution, ist diese ganze Achse für die Versionswahl unerheblich.
Die Build-Werkzeuge vor dem Code prüfen
Gradle nennt in seiner Kompatibilitätsmatrix für jede Java-Version die früheste Gradle-Fassung, die darauf läuft: Java 17 ab Gradle 7.3, Java 21 ab 8.5, Java 25 ab 9.1.0, Java 26 ab 9.4.0. Bei Maven ist 3.9.16 die aktuelle GA-Fassung, und Maven 4 ist mit 4.0.0-rc-6 noch nicht freigegeben. Wenn das Build-Werkzeug den Sprung nicht mitmacht, ist es der erste Posten im Fahrplan und nicht der letzte.
Herausfinden, was auf der neuen Version wegbricht
Drei Kandidaten reichen für die erste Runde. Der Security Manager ist seit JDK 24 dauerhaft abgeschaltet, er lässt sich nicht mehr einschalten. Die Speicherzugriffe in sun.misc.Unsafe melden sich seit JDK 24 zur Laufzeit mit einer Warnung und sind seit JDK 23 als zur Entfernung vorgesehen markiert. Und der 32-Bit-x86-Port ist mit JDK 25 verschwunden. Alle drei betreffen selten euren eigenen Code, aber regelmäßig Bibliotheken und Agenten.
Virtual Threads nur einplanen, wo sie auch tragen
Virtual Threads sind seit Java 21 fertig. In dieser Fassung bleibt ein virtueller Thread aber an seinen Trägerthread gebunden, sobald er in einer synchronized-Methode blockiert, und genau das tun ältere Bibliotheken laufend. JDK 24 hat dieses Verhalten beseitigt. Wenn eure Argumentation für den Umstieg an Virtual Threads hängt, ist 25 die Version, die das Versprechen wirklich einlöst, nicht 21.
Die Werkzeuge im Betrieb mitzählen
Profiler, APM-Agenten, Bytecode-Instrumentierung, Application Server und Container-Basisabbilder haben eigene Freigabelisten. Diese Kette bestimmt in der Praxis öfter das Tempo als der Anwendungscode. Frag die Freigaben ab, bevor du ein Datum zusagst, und plane die Aktualisierung der Agenten als eigenen Schritt vor der Laufzeitumstellung ein.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Was LTS bei Java bedeutet und was es ausdrücklich nicht bedeutet
Alle sechs Monate erscheint eine Java-Version, im März und im September. Alle zwei Jahre erklärt Oracle eine davon zur Long-Term-Support-Fassung. Java 8, 11, 17, 21 und 25 tragen diese Marke, die nächste ist nach heutiger Planung Java 29 im September 2027. Für die Versionen dazwischen gilt eine andere Logik: Sie gelten für den Support als Sammlung von Verbesserungen der jeweils letzten LTS und sind mit dem Erscheinen der nächsten Fassung abgelöst. Java 26 ist im März 2026 erschienen und bekommt Premier Support bis September 2026, dann kommt 27.
Die Marke LTS ist dabei zunächst eine Aussage von Oracle über Oracles eigene Produkte. Was andere Anbieter tun, entscheiden sie selbst, und in der Praxis gehen sie deutlich weiter. Eclipse Temurin sagt für LTS-Versionen mindestens vier Jahre Builds zu und nennt konkrete Termine je Version. Amazon Corretto veröffentlicht ebenfalls eigene Zeitpläne, die für 17, 21 und 25 jeweils über Oracles kostenfreie Phase hinausreichen. Der Quellcode ist derselbe, die Versprechen darüber sind es nicht.
Daraus folgt eine Trennung, die im Gespräch mit dem Einkauf viel Ärger spart. Die Frage "Wie lange können wir auf dieser Version bleiben?" hat zwei Antworten. Die eine gilt, wenn ihr das Oracle JDK einsetzt und einen Vertrag mit Oracle habt oder wollt. Die andere gilt, wenn ihr eine freie Distribution einsetzt, und sie fällt fast immer großzügiger aus. Wer diese beiden Antworten sauber auseinanderhält, führt eine kürzere Diskussion.
Virtual Threads: warum 21 die Marke setzt und erst 25 sie einlöst
Virtual Threads sind mit Java 21 fertig geworden. Die Idee dahinter ist unspektakulär und genau deshalb wirksam: Ein Thread ist nicht mehr ein Betriebssystem-Thread, sondern eine leichte Einheit, die die Laufzeitumgebung selbst plant. Blockiert sie, gibt sie ihren Trägerthread frei, und der kann in der Zwischenzeit andere Arbeit übernehmen. Damit lässt sich der einfache Stil, bei dem jede Anfrage ihren eigenen Thread bekommt, mit sehr vielen gleichzeitigen Anfragen betreiben, ohne dass jemand den Code auf reaktive Ketten umschreiben muss.
In Java 21 gab es dabei eine Lücke, die viele Projekte im Lasttest gefunden haben. Blockierte ein virtueller Thread innerhalb einer synchronized-Methode oder eines synchronized-Blocks, konnte er sich nicht abmelden. Er blieb an seinen Trägerthread gebunden, und weil der Vorrat an Trägerthreads klein ist, standen andere Aufgaben still. Alte Bibliotheken benutzen synchronized reichlich, und Bibliotheken lassen sich nicht auf Zuruf umschreiben. Die verbreitete Antwort war ein Umbau auf ReentrantLock, was in fremdem Code schlicht nicht geht.
JDK 24 hat diesen Punkt beseitigt. Virtuelle Threads geben ihren Trägerthread jetzt auch aus synchronized-Konstrukten heraus frei, und damit fällt der Grund weg, bestehende Bibliotheken für Virtual Threads anzufassen. Für die Versionswahl heißt das: Wenn der Umstieg fachlich mit Durchsatz und Skalierung begründet wird, ist 21 die Version, in der das Feature erscheint, und 25 die Version, in der es sich unter echten Abhängigkeiten so verhält, wie die Begründung es voraussetzt.
Was zwischen 17 und 25 aus der Plattform verschwunden ist
Drei Änderungen erklären die meisten Ausfälle beim Sprung auf 25. Die erste ist der Security Manager. Er war schon in Java 17 als zur Entfernung vorgesehen markiert, seit JDK 24 lässt er sich gar nicht mehr einschalten. Anwendungen, die Berechtigungen über eine Policy-Datei setzen, verlieren damit keinen Schutz, den sie faktisch noch hatten, aber sie starten unter Umständen nicht mehr, weil der Startbefehl eine Option enthält, die es nicht mehr gibt.
Die zweite betrifft sun.misc.Unsafe. Die Speicherzugriffsmethoden dieser Klasse sind seit JDK 23 als zur Entfernung vorgesehen markiert und melden sich seit JDK 24 beim ersten Aufruf zur Laufzeit mit einer Warnung. Ersetzt werden sie durch die VarHandle-API aus JDK 9 und die Foreign Function and Memory API aus JDK 22. Betroffen ist selten euer Code, sehr oft aber Serialisierungsbibliotheken, Object-Caches und Instrumentierungsagenten. Die Warnung ist deshalb wertvoll: Sie zeigt euch, welche Abhängigkeit noch nicht umgestellt ist, und zwar bevor die Methoden wirklich verschwinden.
Die dritte ist der 32-Bit-x86-Port, der mit JDK 25 aus dem Quellcode entfernt wurde. Das trifft nur wenige, aber die trifft es hart, etwa bei einer alten nativen Bibliothek, für die es nur ein 32-Bit-Artefakt gibt. Dazu kommen zwei ältere Umstellungen, die aus einem Java-8-Bestand heraus regelmäßig auffallen: Seit JDK 16 sind die JDK-internen Pakete stark gekapselt, ein Zugriff braucht seither ausdrückliche Startoptionen. Und seit JDK 18 ist UTF-8 die vorgegebene Zeichenkodierung der Standard-APIs, was sich in Dateien, Datenbankinhalten und Protokollausgaben zeigt, wenn vorher stillschweigend die Kodierung des Betriebssystems galt.
Wie du die Entscheidung überprüfst, bevor du sie triffst
Der erste Schritt kostet einen Nachmittag und beantwortet die Hälfte der Fragen: Übersetze das Projekt einmal auf der neuen Version, ohne irgendetwas zu ändern. Was dabei an Warnungen und Fehlern kommt, ist die tatsächliche Aufwandsschätzung. Für den umgekehrten Weg gibt es jdeprscan, das den vorhandenen Bytecode auf veraltete APIs prüft, und jdeps, das euch zeigt, welche Abhängigkeiten in JDK-interne Pakete greifen. Beide gehören zum JDK, ihr müsst nichts beschaffen.
Der zweite Schritt ist ein Lauf gegen die echten Abhängigkeiten. Setz die neue Version auf einer Testumgebung ein und lass die Integrationstests durch, inklusive der Agenten, die im Betrieb mitlaufen. Genau dort tauchen die Warnungen zu sun.misc.Unsafe auf, und genau dort merkt ihr, ob euer APM-Werkzeug die Version schon kennt. Ein sauberer Übersetzungslauf ohne diesen zweiten Schritt hat in der Vergangenheit oft zu Terminzusagen geführt, die dann nicht gehalten haben.
Der dritte Schritt ist der Fahrplan für danach. Die Versionswahl ist keine einmalige Entscheidung, sondern legt fest, wann ihr das nächste Mal ran müsst. Wer heute 25 nimmt, hat bis zur nächsten Pflichtrunde Ruhe, denn Java 29 ist für September 2027 geplant und Premier Support für 25 läuft bis September 2030. Wer 21 nimmt, setzt sich den nächsten Termin auf September 2028. Und wer 17 nimmt, hat ihn schon im September 2026. Schreib den Termin in denselben Beschluss, in dem die Version steht, sonst geht er verloren.
Dazu passende Kurse
Wenn im Team unterschiedliche Vorstellungen davon kursieren, was eine neuere Java-Version tatsächlich verlangt, schaffen Java-Seminare für Teams, die eine Version weiterziehen in wenigen Tagen eine gemeinsame Grundlage.
Wie sicher bist du beim Thema wirklich?
Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.
Wo du genau das übst
Sehr umfangreicher Überblick über Zusammenhänge und Anwendungsbereiche. Sehr zu empfehlen.
Effektives, gemeinsames Erarbeiten der Aufgaben mit vielen praktischen Tipps.
Sehr guter Trainer und gute Aufbereitung der Inhalte und auch eingehen auf Fragen der Beteiligten.
Häufige Fragen
Ist Java 17 jetzt kostenpflichtig?
Lohnt sich der Zwischenschritt über 17, wenn wir von Java 8 kommen?
Können wir eine Version überspringen und direkt von 11 auf 25 gehen?
Was passiert, wenn wir einfach auf einer alten Version bleiben?
Woran erkennen wir, welche Java-Version auf unseren Servern wirklich läuft?
Deine Ansprechpartner
Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Hilft dir, aus dem Programmierung-Programm den passenden Kurs für deinen Stand zu finden.
Norbert Jansen
Beratung & Inhouse
Plant mit dir Inhouse-Trainings, die auf eure Abläufe und euren Datenbestand zugeschnitten sind.
Den Versionssprung mit dem eigenen Code durchspielen
Bei cmt arbeitest du im Java-Kurs an einer laufenden Anwendung und siehst dabei genau die Stellen, an denen eine neuere Laufzeitumgebung Arbeit macht und an denen sie welche abnimmt.
Passt dazu
- Von Java 8 wegkommen: was der Sprung auf eine aktuelle LTS wirklich verlangt
- Oracle JDK oder OpenJDK: welche Java-Distribution ihr einsetzen dürft
- OutOfMemoryError in Java: Heap, Metaspace und was der Dump verrät
- Maven oder Gradle: welches Build-Werkzeug euer Java-Projekt braucht