Tehnologie

Java 27 elimină GC-ul care îngheța aplicațiile și reduce memoria cu 33%

Adrian Kessler
Adaugă-ne în Google

Java 27 sosește cu două modificări care vor ajunge, fără zgomot, pe fiecare JVM aflat în funcțiune. Colectorul G1 devine acum implicit pe orice runtime Java — punând capăt domniei colectorului Serial, cel care oprea lumea, pe hardware-ul cu resurse limitate — iar antetele obiectelor s-au redus de la 96 de biți la 64 de biți, tăind astfel cheltuielile generale cu o treime pentru orice aplicație care creează un număr semnificativ de obiecte.

Colectorul Serial era cel mai vechi GC din Java: simplu, previzibil și brutal. Când rula, îngheța întreaga aplicație până când heap-ul era curățat. Pe servere cu memorie mare și procesoare multiple, acest compromis a devenit de nesuportat cu ani în urmă — G1 a înlocuit Serial ca implicit pe servere începând cu Java 9. Mediile cu resurse limitate au continuat să ruleze Serial până la Java 26: mașini cu un singur CPU, VM-uri mici în cloud, sisteme încorporate cu puțină memorie. Această stare de fapt se încheie cu Java 27.

G1 împarte heap-ul în regiuni mici și le colectează incremental, prioritizând mai întâi secțiunile cu cea mai multă memorie nefolosită — de aici și numele Garbage-First. Pauzele există în continuare, dar sunt mai scurte și mai previzibile decât o colectare completă Serial. Oracle afirmă că G1 este acum competitiv cu Serial la toate dimensiunile de heap. Pentru dezvoltatorii care implementează aplicații pe cele mai ieftine instanțe de cloud disponibile — un singur CPU, un gigabyte de RAM — Java 27 elimină o fricțiune cu care trăiau de ani de zile.

Modificarea antetelor compacte ale obiectelor reprezintă cealaltă jumătate a acestei versiuni. Obiectele Java poartă metadate — informații despre tip, coduri hash, starea de blocare — stocate într-un antet atașat fiecărui obiect. Vechiul format folosea 96 de biți. Java 27 comprimă acest lucru la 64 de biți, o reducere de 33% per obiect. Pentru aplicațiile care creează milioane de obiecte — cozi de mesaje, registre financiare, microservicii bazate pe evenimente — efectul cumulativ este măsurabil: heap mai dens, utilizare mai bună a cache-ului CPU, mai puține cicluri de colectare necesare.

Ambele modificări vin cu avertismente. Aplicațiile reglate explicit pentru comportamentul GC-ului Serial pot întâmpina diferențe neașteptate de temporizare după actualizare. G1 folosește mai multă memorie pentru contabilitate decât Serial, ceea ce contează în medii cu bugete de memorie cu adevărat strânse — deși testele Oracle indică faptul că diferența de performanță este neglijabilă pentru majoritatea sarcinilor de lucru. Echipele de dezvoltare care implementează Java 27 pe sisteme cu resurse limitate ar trebui să testeze noile setări implicite înainte de lansare. Tranziția este automată, dar nu este invizibilă.

Java 27 adaugă, de asemenea, schimbul hibrid de chei post-cuantic pentru TLS 1.3, implementând algoritmul ML-KEM alături de schimbul existent de chei pe curbă eliptică X25519. Conexiunile TLS negociate astăzi ar putea, teoretic, să fie capturate și decriptate ulterior de un viitor computer cuantic. Schimbul hibrid de chei se apără împotriva acestui lucru, cerând unui atacator să spargă simultan atât un algoritm clasic, cât și unul post-cuantic — o adăugire semnificativă pentru orice serviciu Java care gestionează date sensibile.

Java 27 a fost lansat pe 15 septembrie 2026, respectând ciclul de șase luni al platformei. Concurența structurată și constantele leneșe rămân caracteristici în previzualizare în această versiune. Următoarea versiune cu suport pe termen lung din seria Java este așteptată în 2027.

Etichete: , , , , ,

Adaugă-ne în Google

Discuție

Există 0 comentarii.