Teknik

Java 27 tar bort GC:n som frös appar och minskar objektminnet med 33%

Adrian Kessler
Lägg till oss på Google

Java 27 levereras med två förändringar som tyst når varje JVM som körs någonstans. G1-sopinsamlaren är nu standard på varje Java-runtime – vilket avslutar den stop-the-world-baserade Serial-sopinsamlarens grepp om begränsad hårdvara – och objekthuvuden har krympt från 96 bitar till 64 bitar, vilket minskar overheaden med en tredjedel för alla applikationer som skapar ett betydande antal objekt.

Serial-sopinsamlaren var Javas äldsta GC: enkel, förutsägbar och brutal. När den kördes fryste den hela applikationen tills heapen var rensad. På servrar med stort minne och flera CPU:er blev den avvägningen ohållbar för åratal sedan – G1 ersatte Serial som standard för servrar från och med Java 9. Begränsade miljöer fortsatte att köra Serial ända fram till Java 26: en-CPU-maskiner, små moln-VM:ar, inbyggda system med lågt minne. Den standarden upphör med Java 27.

G1 delar upp heapen i små regioner och samlar in dem inkrementellt, med prioritet på de sektioner som har mest skräp först – därav Garbage-First. Pauserna finns fortfarande, men de är kortare och mer förutsägbara än en full Serial-insamling. Oracle uppger att G1 nu är konkurrenskraftigt med Serial vid alla heapstorlekar. För utvecklare som distribuerar applikationer på de billigaste tillgängliga molninstanserna – en CPU, en gigabyte RAM – tar Java 27 bort en friktion de har levt med i åratal.

Förändringen med kompakta objekthuvuden är den andra halvan av denna utgåva. Java-objekt bär metadata – typinformation, hashkoder, låsstatus – lagrad i ett huvud som är kopplat till varje objekt. Det gamla formatet använde 96 bitar. Java 27 komprimerar detta till 64 bitar, en minskning med 33 % per objekt. För applikationer som skapar miljontals objekt – meddelandeköer, finansiella liggare, händelsestyrda mikrotjänster – är den kumulativa effekten mätbar: tätare heap, bättre CPU-cacheutnyttjande, färre insamlingscykler som behövs.

Båda förändringarna har varningar. Applikationer som uttryckligen är inställda för Serial GC-beteende kan se oväntade tidsskillnader efter uppgradering. G1 använder mer minne för bokföring än Serial, vilket spelar roll i miljöer med verkligt snäva minnesbudgetar – även om Oracles tester indikerar att genomströmningsavvägningen är försumbar för de flesta arbetsbelastningar. Utvecklingsteam som distribuerar Java 27 på begränsade system bör testa mot de nya standardinställningarna innan de lanserar. Övergången är automatisk, men den är inte osynlig.

Java 27 lägger även till post-kvant hybridnyckelutbyte för TLS 1.3, som implementerar ML-KEM-algoritmen tillsammans med det befintliga X25519 elliptisk-kurv-utbytet. TLS-anslutningar som förhandlas idag skulle i teorin kunna fångas upp och dekrypteras senare av en framtida kvantdator. Hybridnyckelutbyte försvarar mot detta genom att kräva att en angripare bryter både en klassisk och en post-kvant-algoritm samtidigt – ett meningsfullt tillägg för alla Java-tjänster som hanterar känslig data.

Java 27 släpptes den 15 september 2026, enligt plattformens sexmånaderscykel. Strukturerad samtidighet och lata konstanter fortsätter som förhandsgranskningsfunktioner i denna version. Nästa långtidsstödjande utgåva i Java-serien förväntas 2027.

Taggar: , , , , ,

Lägg till oss på Google

Diskussion

Det finns 0 kommentarer.