Hallo zusammen,
in der Welt der Java-Entwicklung haben wir uns an einen rasanten Wandel gewöhnt. Seit dem legendären Artikel über den Abschied von Java 8 sind fast zwei Jahrzehnte vergangen, und die Plattform hat sich stetig weiterentwickelt. Der monolithische Release-Zyklus ist Geschichte. Stattdessen bekommen wir alle sechs Monate neue Features, die unsere Arbeit effizienter, sicherer und ausdrucksstärker machen.
Heute tauchen wir tiefer ein und werfen einen Blick auf die Neuerungen, die uns Java 24 und Java 25 gebracht haben. Während Java 24 mit einer Fülle von Verbesserungen und Preview-Features den Weg geebnet hat, markiert Java 25 einen signifikanten Meilenstein, der uns einige der am sehnlichsten erwarteten Features als finale Versionen liefert.
Siehe auch: Beyond Java 8 (Java 8 - 23)
Java 24: Der Wegbereiter
Java 24 war kein Long-Term-Support (LTS)-Release, hat aber wichtige Fundamente für die Zukunft gelegt. Es war vollgepackt mit Vorschau-Features und Verbesserungen an der JVM, die oft unbemerkt im Hintergrund wirken, aber die Performance und Stabilität erhöhen.
Ein Highlight, das in Java 24 finalisiert wurde, sind die Stream Gatherers (JEP 461). Bisher waren die Zwischenoperationen in Java Streams wie map
, filter
oder sorted
auf eine feste Liste beschränkt. Mit Gatherers können wir jetzt unsere eigenen Zwischenschritte definieren.
Stellt euch vor, ihr wollt Elemente in feste Blöcke gruppieren oder eine gleitende Fensterfunktion (Sliding Window) ausführen, ohne das zu Fuß zu implementieren. Mit Stream Gatherers
ist das jetzt out of the box möglich.
var numbers = Stream.of(1, 2, 3, 4, 5, 6, 7);
var windows = numbers.gather(Gatherers.windowFixed(3))
.collect(Collectors.toList());
// Ergebnis: [[1, 2, 3], [4, 5, 6]]
Neben dieser Neuerung wurden auch laufende Projekte wie Structured Concurrency und Virtual Threads weiter vorangetrieben. Das zeigt, dass Java sich kontinuierlich in Richtung moderner, nebenläufiger Programmierung bewegt.
Java 25: Die großen Schritte nach vorn
Der wahre Star dieses Artikels ist aber Java 25. Dieses Release bringt nicht nur weitere Verbesserungen, sondern auch die Finalisierung von Features, auf die die Community lange gewartet hat.
1. Scoped Values (JEP 506)
Das ist ein Game-Changer für die nebenläufige Programmierung. Scoped Values bieten eine performante und sichere Alternative zu ThreadLocal
. Sie ermöglichen es, unveränderliche Daten über eine Kette von Methodenausrufen hinweg zu teilen, ohne sie als Argumente übergeben zu müssen.
Der größte Vorteil: Im Gegensatz zu ThreadLocal
, das Speicherlecks verursachen kann, sind Scoped Values
sauber und effizient. Sie sind besonders in Kombination mit Virtual Threads (Project Loom) mächtig, da sie den Kontext pro Request (oder Aufgabe) sauber und performant weitergeben.
// Definition des Scoped Value
private static final ScopedValue<String> USER_ID = ScopedValue.newInstance();
// Wert binden und Methode ausfuehren
ScopedValue.where(USER_ID, "user-123")
.run(() -> processRequest());
public void processRequest() {
// Zugriff auf den Wert
System.out.println("Processing request for user: " + USER_ID.get());
}
2. Schneller Start mit Ahead-of-Time Method Profiling (JEP 515)
Die Startzeit und Aufwärmphase (Warmup) von Java-Anwendungen war schon immer ein Thema. Gerade in Cloud-nativen und Microservice-Architekturen ist ein schneller Start entscheidend. Ahead-of-Time Method Profiling
löst dieses Problem, indem es das “Lernverhalten” der JVM speichert.
Nach einem Trainingslauf erstellt die JVM ein Profil der am häufigsten ausgeführten Methoden. Beim nächsten Start verwendet der Just-In-Time (JIT)-Compiler dieses Profil, um den Code sofort optimal zu kompilieren. Das Ergebnis: Die Anwendung erreicht ihre Spitzenleistung viel schneller, ohne die typische Aufwärmzeit.
3. Java für alle: Kompakte Source Files (JEP 512)
Ein weiterer großer Schritt ist die Vereinfachung des Einstiegs für Java-Anfänger. Mit Compact Source Files ist es nicht mehr nötig, eine Klasse oder eine public static void main(String[] args)
-Methode zu deklarieren, um ein einfaches “Hello World” zu schreiben.
// Vorher
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
// Neu in Java 25
System.out.println("Hello, World!");
Das macht Java als erste Lernsprache deutlich attraktiver und ermöglicht es erfahrenen Entwicklern, schnell kleine Skripte zu schreiben.
Java 24 und 25 im Vergleich: Ein Überblick
Hier ist eine Tabelle, die die wichtigsten neuen Features von Java 24 und Java 25 zusammenfasst.
Feature (JEP) | Java 24 (Status) | Java 25 (Status) | Was es bewirkt |
---|---|---|---|
Stream Gatherers (461) | Finalisiert | Finalisiert | Ermöglicht die Erstellung eigener Zwischenoperationen in Stream-Pipelines, z. B. zum Gruppieren von Elementen in Fenstern. |
Structured Concurrency (499) | 4. Preview | 5. Preview | Vereinfacht die Fehlerbehandlung und das Canceln von logisch zusammengehörigen Aufgaben in verschiedenen Threads. |
Scoped Values (506) | 4. Preview | Finalisiert | Bietet eine sichere und performante Alternative zu ThreadLocal , ideal für Virtual Threads. |
Flexible Constructor Bodies (492) | 3. Preview | 4. Preview | Erlaubt Anweisungen vor dem super() - oder this() -Aufruf im Konstruktor für mehr Flexibilität und Sicherheit. |
Compact Source Files (512) | 3. Preview | Finalisiert | Macht Java anfängerfreundlicher, indem die Notwendigkeit von Boilerplate-Code für einfache Programme entfällt. |
Ahead-of-Time Profiling (515) | Experimental | Finalisiert | Verbessert die Startzeit und Aufwärmphase der JVM, indem es Ausführungsprofile speichert und wiederverwendet. |
Primitive Types in Patterns (507) | 2. Preview | 3. Preview | Erweitert Pattern Matching, um primitive Typen zu unterstützen, was den Code kompakter und lesbarer macht. |
Fazit: Die Evolution geht weiter
Java 24 und Java 25 zeigen, dass die Plattform nicht stillsteht. Sie hat sich von einem behäbigen, monolithischen Riesen in ein agiles, schnelllebiges Ökosystem verwandelt. Die neuen Features wie Stream Gatherers
, Scoped Values
und das vereinfachte “Hello World” sind nicht nur nette Ergänzungen. Sie sind strategische Schritte, die die Sprache relevanter und wettbewerbsfähiger machen, sowohl für Entwickler als auch für moderne Architekturen.
Die Reise von Java ist noch lange nicht zu Ende. Die Arbeit an Virtual Threads und Structured Concurrency geht weiter, und wir können gespannt sein, welche Neuerungen uns die kommenden Releases bringen. Es ist der perfekte Zeitpunkt, um in die neuen Versionen einzutauchen und von den Verbesserungen zu profitieren.