Teknologi

Java 27 fjerner GC’en der frøs apps og reducerer objekthukommelse med 33%

Adrian Kessler
Tilføj os på Google

Java 27 leveres med to ændringer, der vil nå stille ud til hver eneste JVM, der kører hvor som helst. G1-skraldeopsamleren er nu standard på alle Java-køretider – hvilket afslutter Serial-samlerens stop-the-world-holdning på begrænset hardware – og objekt-headere er skrumpet fra 96 bit til 64 bit, hvilket skærer overhead med en tredjedel for enhver applikation, der opretter et betydeligt antal objekter.

Serial-samleren var Javas ældste GC: enkel, forudsigelig og brutal. Når den kørte, frøs den hele applikationen, indtil heapen var ryddet. På servere med stor hukommelse og flere CPU’er blev den handel uholdbar for år siden – G1 erstattede Serial som standard på servere fra og med Java 9. Begrænsede miljøer fortsatte med at køre Serial gennem Java 26: enkelt-CPU-maskiner, små cloud-VM’er, indlejrede systemer med lav hukommelse. Den standard slutter med Java 27.

G1 opdeler heapen i små regioner og indsamler dem trinvist, idet den prioriterer sektionerne med mest skrald først – deraf Garbage-First. Pauserne findes stadig, men de er kortere og mere forudsigelige end en Serial-fuld indsamling. Oracle oplyser, at G1 nu er konkurrencedygtig med Serial ved alle heapstørrelser. For udviklere, der implementerer applikationer på de billigste tilgængelige cloud-instanser – én CPU, én gigabyte RAM – fjerner Java 27 en friktion, de har levet med i årevis.

De kompakte objekt-headere er den anden halvdel af denne udgivelse. Java-objekter bærer metadata – typeinformation, hash-koder, låsningstilstand – gemt i en header, der er knyttet til hvert objekt. Det gamle format brugte 96 bit. Java 27 komprimerer dette til 64 bit, en reduktion på 33% pr. objekt. For applikationer, der opretter millioner af objekter – meddelelseskøer, finansielle hovedbøger, hændelsesdrevne mikroservices – er den kumulative effekt målbar: tættere heap, bedre CPU-cache-udnyttelse, færre nødvendige indsamlingscyklusser.

Begge ændringer har forbehold. Applikationer, der er eksplicit tunet til Serial GC-adfærd, kan opleve uventede timingforskelle efter opgraderingen. G1 bruger mere hukommelse til bogføring end Serial, hvilket betyder noget i miljøer med virkelig stramme hukommelsesbudgetter – selvom Oracles test indikerer, at gennemstrømningsafvejningen er ubetydelig for de fleste arbejdsbelastninger. Udviklingsteams, der implementerer Java 27 på begrænsede systemer, bør teste mod de nye standarder, før de sender. Overgangen er automatisk, men den er ikke usynlig.

Java 27 tilføjer også post-kvante hybrid nøgleudveksling til TLS 1.3, der implementerer ML-KEM-algoritmen sammen med den eksisterende X25519 elliptisk kurve-udveksling. TLS-forbindelser, der forhandles i dag, kunne i teorien blive fanget og dekrypteret senere af en fremtidig kvantecomputer. Hybrid nøgleudveksling forsvarer sig mod det ved at kræve, at en angriber bryder både en klassisk og en post-kvantealgoritme samtidig – en meningsfuld tilføjelse for enhver Java-tjeneste, der håndterer følsomme data.

Java 27 blev udgivet den 15. september 2026 efter platformens seks måneders kadence. Struktureret samtidighed og dovne konstanter fortsætter som preview-funktioner i denne version. Den næste langsigtede supportudgivelse i Java-serien forventes i 2027.

Tags: , , , , ,

Tilføj os på Google

Debat

Der er 0 kommentarer.