Wydanie Java SE 25 LTS i OpenJDK 25

Po sześciu miesiącach rozwoju firma Oracle opublikowała platformę Java SE 25 (Java Platform, Standard Edition 24), której etalonową implementacją jest projekt OpenJDK. Z wyjątkiem usunięcia niektórych przestarzałych możliwości, w Java SE 25 zachowano zgodność wsteczną z wcześniejszymi wydaniami platformy Java – większość wcześniej napisanych projektów Java będzie działać bez zmian na nowej wersji. Gotowe do instalacji pakiety Java SE 25 (JDK, JRE i Server JRE) są dostępne dla systemów Linux (x86_64, AArch64), Windows (x86_64) oraz macOS (x86_64, AArch64). Etalonowa implementacja Java SE 25, opracowana w ramach projektu OpenJDK, jest w pełni otwarta na licencji GPLv2 z wyjątkami GNU ClassPath, które umożliwiają dynamiczne wiązanie z komercyjnymi produktami.

Java SE 25 należy do wydań z rozszerzonym wsparciem, aktualizacje będą wydawane do 2033 roku (aktualizacje publiczne będą dostępne do września 2030 roku). W ramach gałęzi z długoterminowym wsparciem (LTS) kontynuowano wsparcie dla wersji Java SE 17 i 21, aktualizacje będą dostępne do 2029 i 2031 roku, odpowiednio (aktualizacje publiczne – do 2026 i 2028 roku). Rozszerzone wsparcie dla gałęzi LTS Java SE 8 i 11 potrwa do 2030 i 2032 roku.

Wśród nowości w Java SE 25 (1, 2, 3, 4):

  • Dodano eksperymentalne API StableValue do pracy z obiektami zawierającymi niezmienne dane, które są przetwarzane w JVM jako stałe. Do takich obiektów stosowane są optymalizacje wydajności, podobne do pól z słowem kluczowym „final”. API StableValue oddziela tworzenie stałych wartości od ich inicjalizacji, gwarantując, że wartość może być zainicjowana tylko raz, co skraca czas uruchamiania programów i pozwala na stosowanie w kodzie użytkownika optymalizacji skracania stałych (constant-folding), wcześniej stosowanych tylko w wewnętrznym kodzie JDK. class Application { // Było: // static final UserService USERS = new UserService(); // Stało się: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • Dodano eksperymentalne API do kodowania i dekodowania obiektów z kluczami kryptograficznymi, certyfikatami oraz listami odwołanych certyfikatów, wykorzystując format PEM (Pivacy-Enhanced Mail).
  • Dodano wsparcie dla ograniczonych wartości (Scoped Values), które pozwalają na współdzielenie niezmiennych danych w wątkach i efektywną wymianę danych między wątkami podrzędnymi (wartości są dziedziczone). Scoped Values rozwijają się, aby zastąpić mechanizm zmiennych lokalnych wątku (thread-local variables) i są bardziej efektywne przy użyciu bardzo dużej liczby wirtualnych wątków (tysiące lub miliony wątków). Główna różnica między Scoped Values a zmiennymi lokalnymi wątku polega na tym, że pierwsze są zapisywane tylko raz, nie mogą być później zmieniane i pozostają dostępne tylko podczas wykonywania wątku.
  • Dodano API do wykorzystania kryptograficznych funkcji generowania kluczy (KDF, key derivation function), które pozwalają na generowanie dodatkowych kluczy o wymaganej długości na podstawie klucza tajnego (na przykład hasła) oraz dowolnego zestawu danych.
  • Usunięto kod i skrypty budujące dla wsparcia systemów 32-bitowych x86. Zakończenie wsparcia dla 32-bitowych systemów x86 uprościło infrastrukturę do budowy i testowania JDK, a także umożliwiło realizację funkcji uzależnionych od platformy bez tworzenia obsługi wstecznej dla 32-bitowych systemów x86.
  • Dodano możliwość używania jednego wyrażenia „import module M” do imporu wszystkich pakietów eksportowanych przez wskazany moduł. Zmiana ta znacznie upraszcza ponowne wykorzystanie bibliotek modułowych, pozwalając na dołączenie bibliotek i klas bez określania ich miejsca w hierarchii pakietów. Na przykład, wskazanie „import module java.base” spowoduje import wszystkich 54 pakietów wchodzących w skład modułu java.base, które wcześniej należałoby wymieniać osobno („import java.io.*”, „import java.util.*” itp.).
  • Proponowany jest kompaktowy sposób pisania programów, który może okazać się przydatny do nauki i podczas tworzenia małych aplikacji. W kompaktowej formie nie jest wymagane definiowanie zbędnych klas, automatycznie importowane są typowe API i dostępne są uproszczone metody wejścia/wyjścia. Na przykład aplikację „Hello, World!” można sprowadzić do: void main() { IO.println(„Hello, World!”); }
  • Dozwolone jest wskazywanie wyrażeń w konstruktorach przed wywołaniem super(…), używanym do jawnego wywołania konstruktora klasy nadrzędnej z konstruktora klasy dziedziczącej, jeśli te wyrażenia nie odnoszą się do tworzonego przez konstruktor obiektu. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Dodany tryb generatywny działania zbieracza śmieci Shenandoah, w którym oddzielnie przetwarzane są stare i niedawno utworzone obiekty w celu zwiększenia efektywności usuwania obiektów o krótkim czasie życia. Nowy tryb zapewnia bardziej przewidywalną przepustowość, odporność na zmiany obciążenia oraz zmniejszenie zużycia pamięci podczas zbierania śmieci. Planista Shenandoah ma na celu skrócenie czasu zatrzymania podczas zbierania śmieci poprzez wykonanie większej ilości pracy równolegle z działaniem aplikacji Java.
  • Uproszczono tworzenie cache dla prewencyjnego (Ahead-of-Time) ładowania i kompozycji klas, co pozwala przyspieszyć uruchamianie HotSpot JVM poprzez wykorzystanie klas w już załadowanym i skomponowanym stanie. Przy uruchomieniu nie są już wymagane osobne operacje do zapisu aktywności i tworzenia cache'a, wystarcza jedna komenda: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App …
  • Przy starcie HotSpot Java VM wprowadzono możliwość korzystania z profilerów wykonania metod, uzyskanych podczas poprzedniego uruchomienia aplikacji. Zmiana pozwala JIT-kompilatorowi na ominięcie gromadzenia statystyk i natychmiastowe rozpoczęcie generowania kodu natywnego bez oczekiwania na utworzenie profilu.
  • W HotSpot JVM wprowadzono wsparcie dla skompaktowanych nagłówków obiektów, których rozmiar na systemach 64-bitowych zmniejszono z 96 do 64 bitów (z 12 do 8 bajtów). Zmniejszenie rozmiaru nagłówków pozwala na zmniejszenie rozmiaru sterty i zwiększenie efektywności pracy cache'a.
  • Zaproponowano testową implementację API Vector, która oferuje funkcje obliczeń wektorowych wykonywanych przy użyciu instrukcji wektorowych procesorów x86_64 i AArch64, co pozwala na jednoczesne stosowanie operacji do wielu wartości (SIMD). W przeciwieństwie do możliwości automatycznej wektoryzacji operacji skalarnych dostępnej w kompilatorze JIT HotSpot, nowe API umożliwia jawne zarządzanie wektoryzacją dla równoległego przetwarzania danych.
  • Zaproponowano do testowania piątą wersję wstępną API dla strukturalnego równoległości (Structured Concurrency), która upraszcza rozwój aplikacji wielowątkowych poprzez przetwarzanie kilku zadań wykonywanych w różnych wątkach jako jednego bloku.
  • W mechanizmie dopasowywania do wzorca zaproponowano trzeci wersję wstępną funkcji użycia typów prymitywnych (int, byte, char i inne podstawowe typy, które nie są obiektami) we wszystkich rodzajach szablonów, w operatorze „instanceof” oraz w blokach „switch”. switch (x.getStatus()) { case 0 -> „okay”; case 1 -> „warning”; case 2 -> „error”; case int i -> „unknown status: ” + i; } if (i instanceof byte b) { … b … }
  • W JDK Flight Recorder (JFR) dodano eksperymentalne wsparcie dla profilowania z bardziej precyzyjnym śledzeniem zużycia CPU na platformie Linux. Informacje o czasie działania różnych konstrukcji mogą być wizualizowane przy użyciu kolorowych wykresów „FlameGraph”.
  • Zwiększona stabilność pracy JDK Flight Recorder (JFR) przy asynchronicznym próbkowaniu stosów wątków Java dzięki omijaniu stosu wywołań tylko w „bezpiecznych punktach” (safepoints).
  • W JDK Flight Recorder (JFR) dodano narzędzia do śledzenia i oceny czasu działania metod. Wspierane jest śledzenie stosu wywołań konkretnych metod oraz rejestracja dokładnej statystyki wywołań metod, obejmującej takie metryki, jak czas działania i liczba wywołań.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster