Technologie

Java 27 entfernt den einfrierenden GC und reduziert den Objektspeicher um 33%

Adrian Kessler
Fügen Sie uns bei Google hinzu

Java 27 bringt zwei Änderungen mit, die leise jede JVM erreichen werden, die irgendwo läuft. Der G1-Garbage-Collector ist jetzt auf jeder Java-Laufzeitumgebung die Voreinstellung – das beendet den Ausnahmezustand des Stop-the-World-Serial-Collectors auf ressourcenbeschränkter Hardware – und die Objekt-Header wurden von 96 Bit auf 64 Bit verkleinert, was den Overhead für jede Anwendung, die eine nennenswerte Anzahl von Objekten erzeugt, um ein Drittel reduziert.

Der Serial-Collector war der älteste Garbage Collector von Java: einfach, vorhersagbar und brutal. Wenn er lief, fror er die gesamte Anwendung ein, bis der Heap bereinigt war. Auf großen Servern mit viel Arbeitsspeicher und mehreren CPUs war dieser Trade-off schon vor Jahren untragbar – G1 ersetzte Serial als Standard auf Servern ab Java 9. Ressourcenbeschränkte Umgebungen liefen bis Java 26 weiter mit Serial: Ein-CPU-Maschinen, kleine Cloud-VMs, eingebettete Systeme mit wenig Speicher. Diese Voreinstellung endet mit Java 27.

G1 teilt den Heap in kleine Regionen auf und sammelt sie inkrementell, wobei zuerst die Abschnitte mit dem meisten Müll bereinigt werden – daher Garbage-First. Die Pausen gibt es immer noch, aber sie sind kürzer und vorhersagbarer als eine vollständige Serial-Sammlung. Oracle gibt an, dass G1 jetzt bei allen Heap-Größen mit Serial konkurrieren kann. Für Entwickler, die Anwendungen auf den billigsten verfügbaren Cloud-Instanzen bereitstellen – eine CPU, ein Gigabyte RAM – beseitigt Java 27 eine Reibung, mit der sie jahrelang gelebt haben.

Die kompakten Objekt-Header sind die andere Hälfte dieses Releases. Java-Objekte tragen Metadaten – Typinformationen, Hash-Codes, Sperrzustände – die in einem Header gespeichert werden, der an jedes Objekt angehängt ist. Das alte Format verwendete 96 Bit. Java 27 komprimiert dies auf 64 Bit, eine Reduzierung um 33 % pro Objekt. Für Anwendungen, die Millionen von Objekten erzeugen – Message Queues, Finanzbücher, ereignisgesteuerte Microservices – ist der kumulative Effekt messbar: dichterer Heap, bessere CPU-Cache-Auslastung, weniger Sammelzyklen.

Beide Änderungen haben ihre Tücken. Anwendungen, die explizit auf das Verhalten des Serial GC abgestimmt sind, können nach dem Upgrade unerwartete Timing-Unterschiede feststellen. G1 verbraucht mehr Speicher für die Buchhaltung als Serial, was in Umgebungen mit wirklich knappen Speicherbudgets eine Rolle spielt – obwohl Oracles Tests zeigen, dass der Durchsatz-Kompromiss für die meisten Arbeitslasten vernachlässigbar ist. Entwicklungsteams, die Java 27 auf eingeschränkten Systemen einsetzen, sollten die neuen Voreinstellungen vor der Auslieferung testen. Der Übergang erfolgt automatisch, ist aber nicht unsichtbar.

Java 27 fügt außerdem einen Post-Quanten-Hybrid-Schlüsselaustausch für TLS 1.3 hinzu, der den ML-KEM-Algorithmus neben dem bestehenden X25519-Elliptische-Kurven-Schlüsselaustausch implementiert. TLS-Verbindungen, die heute ausgehandelt werden, könnten theoretisch später von einem zukünftigen Quantencomputer abgefangen und entschlüsselt werden. Der hybride Schlüsselaustausch schützt davor, indem er von einem Angreifer verlangt, gleichzeitig einen klassischen und einen Post-Quanten-Algorithmus zu brechen – eine sinnvolle Ergänzung für jeden Java-Dienst, der sensible Daten verarbeitet.

Java 27 wurde am 15. September 2026 veröffentlicht, dem sechsmonatigen Rhythmus der Plattform folgend. Strukturierte Nebenläufigkeit und faule Konstanten bleiben in dieser Version als Preview-Features bestehen. Das nächste Long-Term-Support-Release in der Java-Serie wird für 2027 erwartet.

Schlagwörter: , , , , ,

Fügen Sie uns bei Google hinzu

Diskussion

Es gibt 0 Kommentare.