Skip to main content
Entwickler Themen
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Java 25 (LTS)

Java 25 (September 2025) ist eine LTS-Version. Zwischen Java 22 und 25 sind wichtige Sprach- und Plattform-Features gereift: von Vorschauen (Preview/Incubator) hin zu finalen Features. Diese Seite fasst die wichtigsten Highlights zusammen und zeigt kurze Beispiele.

Highlights im Überblick

  • Java 22 (März 2024, Feature Release):
    • Foreign Function & Memory API (FFM) finalisiert
    • String Templates (2. Vorschau)
    • Structured Concurrency (2. Vorschau)
    • Stream Gatherers (Vorschau)
    • Unnamed Patterns & Variables (Vorschau)
    • Launch Multi‑File Source‑Code Programs (bequemer Programmstart)
    • Vector API (weiterer Incubator‑Stand)
  • Java 23 (September 2024, Feature Release):
    • Entwurf: weitere Previews/Finalisierungen rund um String Templates, Structured Concurrency, Vector API u.a. – bitte bestätigen.
  • Java 24 (März 2025, Feature Release):
    • Entwurf: Konsolidierungen und Performance – bitte bestätigen.
  • Java 25 (September 2025, LTS – geplant):
    • Entwurf: Konsolidiertes LTS‑Ziel (Stabilisierung von Previews, Performance/GC) – bitte bestätigen.

Java 22: Reifes FFM, produktiv nutzbare Quality‑of‑Life‑Features

Foreign Function & Memory API (FFM) – final

Die FFM‑API ist ab Java 22 final. Sie erlaubt typsichere Interop mit nativen Bibliotheken und kontrollierten Off‑Heap‑Speicherzugriff – ohne JNI‑Boilerplate.

Mini‑Beispiel (Speicher allokieren/lesen/schreiben):

import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;

class Ffm22FinalDemo {
  public static void main(String[] args) {
    try (Arena arena = Arena.ofConfined()) {
      MemorySegment seg = arena.allocate(ValueLayout.JAVA_INT);
      seg.set(ValueLayout.JAVA_INT, 0, 42);
      int v = seg.get(ValueLayout.JAVA_INT, 0);
      System.out.println(v); // 42
    }
  }
}

Nutzen: weniger JNI, sichere Lebenszyklen, hohe Performance.


String Templates – 2. Vorschau

String‑Interpolation mit Templates und Prozessoren. In Java 22 weiterhin Preview – Aktivierung über Preview‑Flags.

// Kompilieren/Laufen mit Preview:
// javac --enable-preview --release 22 Demo.java
// java  --enable-preview Demo

import static java.lang.StringTemplate.STR;

class StringTemplates22Demo {
  public static void main(String[] args) {
    int x = 7;
    String s = STR."x = \{x}, x^2 = \{x * x}";
    System.out.println(s);
  }
}

Nutzen: sichere, lesbare Alternative zu Verkettungen und String.format.


Structured Concurrency – 2. Vorschau

Erleichtert die Koordination mehrerer parallel laufender Tasks mit klaren Abbruch‑/Fehlersemantiken.

// Preview-API (Java 22): --enable-preview erforderlich
import java.util.concurrent.Callable;
import java.util.concurrent.StructuredTaskScope;

class StructuredConcurrency22Demo {
  static String fetch() throws Exception {
    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
      Callable<String> a = () -> expensive("A");
      Callable<String> b = () -> expensive("B");
      var fa = scope.fork(a);
      var fb = scope.fork(b);
      scope.join();
      scope.throwIfFailed();
      return fa.resultNow() + "," + fb.resultNow();
    }
  }

  static String expensive(String id) throws InterruptedException {
    Thread.sleep(50);
    return id;
  }
}

Stream Gatherers – Vorschau

Erweitert die Stream‑Pipeline um flexible „Gatherer“, z. B. für fensternde/akkumulierende Operationen.

// Preview-API: --enable-preview erforderlich
import java.util.stream.Gatherers;
import java.util.stream.Stream;

class GatherersDemo {
  public static void main(String[] args) {
    // laufende Summe als Beispiel
    Stream.of(1, 2, 3, 4)
          .gather(Gatherers.scan((a, b) -> a + b))
          .forEach(System.out::println); // 1, 3, 6, 10
  }
}

Unnamed Patterns & Variables – Vorschau

Erlaubt das gezielte Weglassen von Namen in Mustern/Bindings mittels _.

record Point(int x, int y) {}

class UnnamedPatternsDemo {
  static String describe(Object o) {
    return switch (o) {
      case Point(int x, _) -> "Point mit x=" + x; // y wird ignoriert
      default -> "?";
    };
  }
}

Launch Multi‑File Source‑Code Programs

Ermöglicht, mehrere .java‑Dateien direkt zu starten, ohne vorheriges manuelles Kompilieren/Packaging.

java Main.java util/Helper.java

Vector API – weiterer Incubator‑Stand

Die Vektor‑API bleibt im Incubator und ermöglicht portables SIMD. Eignet sich für numerische/ML‑nahe Hot‑Loops.


Java 23: Entwurf (bitte bestätigen)

Inhalte dieses Abschnitts sind als Platzhalter/Entwurf gedacht und sollten nach Bestätigung konkretisiert werden.

  • Mögliche Schwerpunkte: weitere Previews/Finalisierungen rund um String Templates, Structured Concurrency, Gatherers/Vector API, Performance‑ und GC‑Verbesserungen.
  • Bitte gewünschte JEPs/Themen nennen, die hier konkret dargestellt werden sollen.

Java 24: Entwurf (bitte bestätigen)

  • Mögliche Schwerpunkte: Konsolidierung vor LTS, Stabilisierung von APIs, Tooling‑Verbesserungen.
  • Bitte konkrete Themen/JEPs nennen.

Java 25 (LTS, September 2025)

Java 25 ist die aktuelle LTS‑Version und enthält 18 final veröffentlichte JEPs. Die wichtigsten und für Entwickler besonders relevanten Features sind im Folgenden priorisiert dargestellt.

Sprachfeatures

Primitive Types in Patterns (Preview)

Pattern Matching unterstützt nun alle primitiven Datentypen (z.B. int, double) in Typmustern und switch‑Expressions. Dadurch entfällt unnötiges Autoboxing und das Pattern‑System wird vollständig konsistent.

Module Import Declarations (final)

Mit import module <Modulname>; können alle exportierten Packages eines Moduls mit einer einzigen Deklaration importiert werden. Dadurch sinkt der Import‑Boilerplate – insbesondere in modularen Anwendungen – deutlich.

Compact Source Files & Instance Main Methods (final)

Einfachere Single‑File‑Programme ohne öffentliche Klassendeklaration und mit einer nicht‑statischen main‑Methode. Ideal für Skripte, Lernbeispiele und kleine Tools.

Flexible Constructor Bodies (final)

Konstruktoren können nun vor super() oder this() einen sogenannten Prolog enthalten – etwa für Validierungen oder frühzeitige Initialisierung von Feldern. Ein großes Qualitäts‑of‑Life‑Feature für saubere Konstruktorlogik.


Concurrency & APIs

Structured Concurrency (5. Preview)

Ermöglicht gruppierte, sicherere Nebenläufigkeit mit klaren Abbruch‑ und Fehlersemantiken. Insbesondere in Kombination mit virtuellen Threads sinnvoll.

Scoped Values (final)

Leichtere und performantere Alternative zu ThreadLocal für kontextbezogene immutable Werte. Ideal für Logging‑Kontexte, Security‑Kontexte oder Request‑Daten.

Stable Values (Preview)

„Deferred immutability“: Ein Container wird einmalig gesetzt und ist danach unveränderlich. Ermöglicht Lazy‑Initialisierung ohne Verlust von Optimierungsmöglichkeiten.

Vector API (10. Incubator)

Datenparallele Operationen, die zur Laufzeit in SIMD‑Instruktionen umgesetzt werden. Für numerische und ML‑nahe Workloads relevant.


Sicherheit

PEM‑Encoding von Keys & Zertifikaten (Preview)

Direkte Unterstützung zum Lesen/Schreiben von PEM‑Dateien (-----BEGIN ...-----). Ersetzt viele bisher notwendige Lösungen in Drittbibliotheken.

Key Derivation Function (KDF) API (final)

Standardisierte API für PBKDF2, HKDF, scrypt und ähnliche Verfahren. Vereinheitlicht die sichere Schlüsselableitung in modernen Protokollen.


Performance & GC

Compact Object Headers

Optionale Reduktion der Objekt‑Header‑Größe auf 64 Bit. Senkt den Heap‑Verbrauch teils deutlich und verbessert Cache‑Lokalität.

Generational Shenandoah GC

Shenandoah erhält eine produktionsreife Young/Old‑Generation‑Trennung. Verbesserte Durchsatz‑ und Pausenzeiten, analog zu G1/ZGC.

AOT Command‑Line Ergonomics

Einfacherer Workflow zum Erstellen eines AOT‑Caches: Profilieren und Kompilieren in einem Schritt.

AOT Method Profiling

Verkürzt die JVM‑Aufwärmphase durch Wiederverwendung zuvor gesammelter Profiling‑Daten. Nützlich für Microservices und CLI‑Tools.


Monitoring & Profiling

JFR CPU‑Time Profiling (experimental)

Präzises Messen von CPU‑Zeit statt Sampling‑Heuristiken. Liefert exaktere Hotspot‑Analysen.

JFR Cooperative Sampling

Stabileres Sampling nur an Safepoints – weniger Verzerrung und weniger Risiko unsicherer Stack‑Zustände.

JFR Method Timing & Tracing

Gezieltes bytecode‑basiertes Instrumentieren einzelner Methoden zur präzisen Aufruf‑Analyse ohne Codeänderung.


Weitere Änderungen

Entfernung des 32‑Bit‑x86‑Ports

X86‑32‑Support wurde entfernt. Fokus auf moderne 64‑Bit‑JVMs, reduzierter Wartungsaufwand.


Damit steht Java 25 als moderne, konsolidierte LTS‑Version bereit, die sowohl Sprachfeatures als auch Performance, Nebenläufigkeit und Diagnosefähigkeiten deutlich verbessert.


Fazit

Mit Java 22 wurden zentrale Bausteine wie die FFM‑API produktionsreif. Die folgenden Releases bis Java 25 (LTS) dienen voraussichtlich der Konsolidierung und Abrundung (String Templates, Structured Concurrency, Stream Gatherers, Vektor‑API etc.). Sobald Ihre Wunsch‑Schwerpunkte für 23–25 feststehen, füllen wir die Entwurfsabschnitte mit konkreten, lauffähigen Beispielen und setzen die Seite auf „draft: false“.