Wydanie Java SE 27 i OpenJDK 27

Po sześciu miesiącach prac rozwojowych firma Oracle opublikowała platformę Java SE 27 (Java Platform, Standard Edition 27), w której jako bazowa realizacja wykorzystano otwarty projekt OpenJDK. Z wyjątkiem usunięcia niektórych przestarzałych funkcji, Java SE 27 zachowuje zgodność wsteczną z wcześniejszymi wersjami platformy Java — większość wcześniej napisanych projektów Java będzie bez zmian działać w nowej wersji. Gotowe do zainstalowania pakiety Java SE 27 (JDK, JRE i Server JRE) są przygotowane dla systemów Linux (x86_64, AArch64), Windows (x86_64) oraz macOS (x86_64, AArch64). Opracowana w ramach projektu OpenJDK bazowa realizacja Java SE 27 jest w pełni otwarta na licencji GPLv2 z wyjątkiem GNU ClassPath, które umożliwia dynamiczne powiązanie z komercyjnymi produktami.

Java SE 27 należy do kategorii wydań z standardowym czasem wsparcia, a aktualizacje będą wydawane do następnej wersji. Jako gałąź z długoterminowym wsparciem (LTS) należy używać Java SE 25, Java SE 21 lub Java SE 17, aktualizacje dla których będą wydawane do roku 2033, 2031 i 2029 odpowiednio (publiczne — do września 2030, 2028 i 2026). Rozszerzone wsparcie dla gałęzi LTS Java SE 8 potrwa do 2030 roku, a dla Java SE 11 — do 2032 roku.

Wśród zmian w Java SE 27 (1, 2, 3, 4):

  • Domyślnie dla wszystkich środowisk używany jest kolektor śmieci G1 (Garbage-First), który wcześniej stosowany był w systemach serwerowych. G1 jest zoptymalizowany do używania w wieloprocesorowych systemach z dużą ilością pamięci oraz równoważenia pomiędzy przewidywalnością opóźnień a wysoką przepustowością. W trakcie działania G1 dzieli pamięć na wiele małych obszarów i w pierwszej kolejności oczyści te obszary, w których jest największa liczba nieużywanych obiektów i mniej aktywnie używanych danych.
  • W HotSpot JVM domyślnie stosowane są kompaktowe nagłówki obiektów. Rozmiar nagłówków w systemach 64-bitowych został zmniejszony z 96 do 64 bitów, co zmniejszyło zużycie pamięci i zwiększyło prawdopodobieństwo, że dane trafią do pamięci podręcznej procesora. W testach SPECjbb2015 zużycie pamięci zmniejszyło się o 22%, obciążenie CPU zmniejszyło się o 8%, a liczba operacji zbierania śmieci zmniejszyła się o 15%. W testach parsera JSON czas wykonania testów skrócił się o 10%.
  • Wprowadzono wsparcie dla hybrydowych schematów ustalania klucza w realizacji TLS 1.3, łączących algorytm ML-KEM (CRYSTALS-Kyber), odporny na ataki z wykorzystaniem komputerów kwantowych, z klasycznymi algorytmami opartymi na krzywych eliptycznych ECDHE: X25519MLKEM768 (ECDHE z krzywą X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE z krzywą secp256r1 + ML-KEM-768) oraz SecP384r1MLKEM1024 (ECDHE z krzywą secp384r1 + ML-KEM-1024). W API javax.net.SSL Te schematy są domyślnie włączone i do ich zastosowania nie są wymagane zmiany w aplikacjach.
  • W narzędziu JDK Flight Recorder (JFR), stosowanym do monitorowania, profilowania i diagnozowania wydajności, dodano wsparcie dla usuwania z zachowywanych informacji diagnostycznych argumentów wiersza poleceń, początkowych wartości zmiennych środowiskowych oraz właściwości systemowych. Zmiana ta zapobiega wyciekom poufnych danych, które przetwarza profilowany proces, takich jak tokeny autoryzacyjne i klucze dostępu do API przekazywane przez zmienne środowiskowe.
  • Wdrożono trzeci wstępny projekt API Lazy Constants, umożliwiający pracę z obiektami, które zawierają niemutowalne dane i są przetwarzane w JVM jako stałe. Do takich obiektów stosowane są optymalizacje wydajności, podobne do pól oznaczonych słowem kluczowym „final”. W przeciwieństwie do „final” nowe API oddziela tworzenie stałych wartości od ich inicjalizacji, zapewniając, że wartość może być zainicjalizowana tylko raz, co skraca czas uruchamiania programów i pozwala na stosowanie w kodzie użytkownika optymalizacji zwijania stałych (constant-folding), które wcześniej stosowane były tylko w wewnętrznym kodzie JDK. class Application { // Było: // static final UserService USERS = new UserService(); // Teraz można: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • W mechanizmie dopasowywania wzorów zaproponowano piątą wstępną wersję możliwości używania typów prymitywnych (int, byte, char i inne podstawowe typy, które nie są obiektami) we wszystkich typach wzorców, w operatorze „instanceof” oraz wewnątrz bloków „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 … }
  • Zaproponowano siódmą wersję testową API do strukturalnego równoległego przetwarzania (Structured Concurrency), które upraszcza rozwój aplikacji wielowątkowych poprzez obsługę wielu zadań wykonywanych w różnych wątkach jako jednego bloku.
  • Zrealizowano dwunastą testową implementację API Vector, które udostępnia funkcje do obliczeń wektorowych, wykonywanych z wykorzystaniem instrukcji wektorowych procesorów x86_64 i AArch64, umożliwiając jednoczesne zastosowanie operacji do wielu wartości (SIMD). W przeciwieństwie do możliwości automatycznej wektoryzacji operacji skalarnych w kompilatorze JIT HotSpot, nowe API pozwala na jawne zarządzanie wektoryzacją dla równoległego przetwarzania danych.
  • Dostępna jest trzecia wersja wstępna API do kodowania i dekodowania obiektów z kluczami kryptograficznymi, certyfikatami i listami unieważnionych certyfikatów, przy użyciu formatu PEM (Pivacy-Enhanced Mail).

Dodatkowo warto wspomnieć o publikacji aktualizacji platformy do tworzenia aplikacji z interfejsem graficznym JavaFX 27. W najbliższych godzinach przewidywane jest również wydanie uniwersalnej maszyny wirtualnej GraalVM 27, która obsługuje uruchamianie aplikacji w JavaScript (Node.js), Pythonie, Rubym, R, dowolnych językach dla JVM (Java, Scala, Clojure, Kotlin) oraz językach, dla których można generować kod bitowy LLVM (C, C++, Rust).

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster