Technologia

Java 27 usuwa GC wstrzymujący aplikacje i zmniejsza pamięć obiektów o 33%

Adrian Kessler
Dodaj nas w Google

Java 27 wprowadza dwie zmiany, które po cichu dotrą do każdej JVM działającej gdziekolwiek. Garbage collector G1 jest teraz domyślny w każdym środowisku uruchomieniowym Java — kończąc tym samym epokę zatrzymującego świat kolektora Serial na ograniczonym sprzęcie — a nagłówki obiektów zmniejszyły się z 96 bitów do 64 bitów, co przekłada się na jedną trzecią mniejsze narzuty dla każdej aplikacji tworzącej znaczną liczbę obiektów.

Kolektor Serial był najstarszym GC w Javie: prostym, przewidywalnym i brutalnym. Gdy działał, zamrażał całą aplikację, dopóki sterta nie została wyczyszczona. Na serwerach z dużą pamięcią i wieloma procesorami taki kompromis stał się nie do utrzymania lata temu — G1 zastąpił Serial jako domyślny na serwerach już od Javy 9. Ograniczone środowiska nadal korzystały z Serial do Javy 26: maszyny z jednym procesorem, małe chmurowe VM, systemy wbudowane o niskiej pamięci. Ten domyślny wybór kończy się wraz z Javą 27.

G1 dzieli stertę na małe regiony i zbiera je przyrostowo, priorytetyzując sekcje z największą ilością śmieci — stąd nazwa Garbage-First. Pauzy nadal występują, ale są krótsze i bardziej przewidywalne niż pełne czyszczenie w Serialu. Oracle twierdzi, że G1 jest teraz konkurencyjny z Seriale przy każdej wielkości sterty. Dla programistów wdrażających aplikacje na najtańszych dostępnych instancjach chmurowych — jeden procesor, jeden gigabajt pamięci RAM — Java 27 usuwa przeszkodę, z którą żyli przez lata.

Zmniejszone nagłówki obiektów to druga połowa tej wersji. Obiekty Javy niosą metadane — informacje o typie, kody skrótu, stan blokady — przechowywane w nagłówku dołączonym do każdego obiektu. Stary format używał 96 bitów. Java 27 kompresuje to do 64 bitów, co daje 33% redukcję na obiekt. Dla aplikacji tworzących miliony obiektów — kolejek komunikatów, rejestrów finansowych, mikroserwisów sterowanych zdarzeniami — skumulowany efekt jest wymierny: gęstsza sterta, lepsze wykorzystanie pamięci podręcznej CPU, mniej cykli zbiórki.

Obie zmiany niosą zastrzeżenia. Aplikacje dostrojone specjalnie do zachowania Serial GC mogą po aktualizacji zauważyć nieoczekiwane różnice w czasie. G1 zużywa więcej pamięci na księgowość niż Serial, co ma znaczenie w środowiskach z naprawdę napiętymi budżetami pamięci — choć testy Oracle wskazują, że różnica w przepustowości jest znikoma dla większości obciążeń. Zespoły programistyczne wdrażające Javę 27 w systemach o ograniczonych zasobach powinny przetestować nowe domyślne ustawienia przed wydaniem. Przejście jest automatyczne, ale nie niewidoczne.

Java 27 dodaje również postkwantową hybrydową wymianę kluczy dla TLS 1.3, implementując algorytm ML-KEM obok istniejącej wymiany kluczy X25519 na krzywej eliptycznej. Połączenia TLS negocjowane dziś mogłyby w teorii zostać przechwycone i odszyfrowane później przez przyszły komputer kwantowy. Hybrydowa wymiana kluczy broni się przed tym, wymagając od atakującego złamania zarówno klasycznego, jak i postkwantowego algorytmu jednocześnie — to znaczący dodatek dla każdej usługi Java obsługującej wrażliwe dane.

Java 27 została wydana 15 września 2026 roku, zgodnie z sześciomiesięcznym cyklem platformy. Ustrukturyzowana współbieżność i leniwe stałe pozostają w tej wersji funkcjami zapowiedzianymi. Kolejne wydanie długoterminowego wsparcia w serii Java ma nastąpić w 2027 roku.

Tagi: , , , , ,

Dodaj nas w Google

Dyskusja

Jest 0 komentarzy.