Wydanie Java SE 17

Po sześciu miesiącach prac rozwojowych firma Oracle wydała platformę Java SE 17 (Java Platform, Standard Edition 17), której referencyjną implementacją jest otwarty projekt OpenJDK. Z wyjątkiem usunięcia niektórych przestarzałych funkcji w Java SE 17, zachowano zgodność wsteczną z poprzednimi wydaniami platformy Java — większość wcześniej napisanych projektów Java będzie działać bez zmian w nowej wersji. Gotowe do zainstalowania pakiety Java SE 17 (JDK, JRE i Server JRE) przygotowano dla systemów Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Referencyjna implementacja Java 17, 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 17 należy do kategorii wydań z długoterminowym wsparciem (LTS), aktualizacje będą wydawane do 2029 roku. Wsparcie dla poprzedniego wydania pośredniego Java 16 zostanie zakończone. Poprzednia wersja LTS Java 11 będzie wspierana do 2026 roku. Następne wydanie LTS zaplanowane jest na wrzesień 2024 roku. Przypominamy, że począwszy od wydania Java 10 projekt przeszedł na nowy proces rozwoju, który zakłada krótszy cykl wydawania nowych wersji. Nowe funkcje są teraz rozwijane w jednej stale aktualizowanej gałęzi master, do której dodawane są gotowe zmiany, a co sześć miesięcy odgałęziają się gałęzie do stabilizacji nowych wydań.

Wśród nowości Java 17 można wymienić:

  • Proponowana jest eksperymentalna implementacja dopasowania po wzorach w wyrażeniach „switch”, co pozwala na używanie w etykietach „case” elastycznych wzorów obejmujących szereg wartości, dla których wcześniej konieczne było stosowanie rozbudowanych łańcuchów wyrażeń „if…else”. Ponadto, wewnątrz „switch” zapewniono możliwość obsługi wartości NULL. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Zostało ustabilizowane wsparcie dla klas i interfejsów „sealed”, które nie mogą być wykorzystywane przez inne klasy i interfejsy do dziedziczenia, rozszerzania lub nadpisywania implementacji. Klasy sealed oferują również bardziej deklaratywny sposób ograniczenia użycia superklasy niż modyfikatory dostępu, oparty na jawnej liście dozwolonych podklas do rozszerzenia. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Proponowana jest druga wstępna implementacja API Vector, która dostarcza funkcje dla obliczeń wektorowych, wykonywanych z wykorzystaniem instrukcji wektorowych procesorów x86_64 i AArch64, umożliwiających jednoczesne zastosowanie operacji na kilku wartościach (SIMD). W przeciwieństwie do możliwości automatycznej wektoryzacji operacji skalarowych dostępnych w kompilatorze JIT HotSpot, nowe API umożliwia wyraźne zarządzanie wektoryzacją dla równoległego przetwarzania danych.
  • Dodano wstępną implementację API Foreign Function & Memory, dzięki któremu aplikacje mogą komunikować się z kodem i danymi znajdującymi się poza środowiskiem uruchomieniowym Java. Nowe API pozwala na efektywne wywoływanie funkcji niewykonywanych w JVM oraz dostęp do pamięci, która nie jest zarządzana przez JVM. Na przykład, można wywoływać funkcje z zewnętrznych wspólnych bibliotek i uzyskiwać dostęp do danych procesu bez używania JNI.
  • Silnik renderujący dla macOS, zapewniający działanie API Java 2D, które z kolei jest wykorzystywane w API Swing, został dostosowany do użycia z graficznym API Metal. Domyślnie na platformie macOS nadal stosowane jest OpenGL, a aby włączyć wsparcie dla Metal, należy ustawić parametr „-Dsun.java2d.metal=true” oraz mieć co najmniej wersję macOS 10.14.x.
  • Dodano port dla platformy macOS/AArch64 (komputery Apple z nowymi chipami Apple M1). Cechą portu jest wsparcie mechanizmu ochrony pamięci W^X (Write XOR Execute), w którym strony pamięci nie mogą być jednocześnie dostępne do zapisu i wykonania. (kod może być wykonany tylko po zablokowaniu zapisu, a zapis do strony pamięci możliwy jest tylko po zablokowaniu wykonania).
  • Zastosowanie tylko ścisłej (strictfp) semantyki dla wyrażeń z liczbami zmiennoprzecinkowymi zostało przywrócone. Wsparcie dla semantyki 'default', wprowadzającej uproszczenia dla systemów z bardzo starymi koprocesorami matematycznymi x87, zostało zakończone po wydaniu Java 1.2 (po wprowadzeniu instrukcji SSE2 potrzeba dodatkowej semantyki zniknęła).
  • Zrealizowane zostały nowe typy interfejsów do generatorów liczb pseudolosowych, a także wprowadzono dodatkowe algorytmy dla lepszej generacji liczb losowych. Aplikacje otrzymały możliwość wyboru algorytmu generowania liczb pseudolosowych. Ulepszono wsparcie dla generacji strumieni losowych obiektów.
  • Zrealizowana została obowiązkowa ścisła enkapsulacja wszystkich wewnętrznych elementów JDK, z wyjątkiem krytycznych interfejsów API, takich jak sun.misc.Unsafe. Ścisła enkapsulacja blokuje próby dostępu do wewnętrznych klas, metod i pól z kodu. Wcześniej tryb ścisłej enkapsulacji można było wyłączyć za pomocą opcji '—illegal-access=permit', jednak została ona uznana za przestarzałą. Aplikacje, które potrzebują dostępu do wewnętrznych klas, metod i pól, powinny jawnie określić je za pomocą opcji '—add-opens' lub atrybutu Add-Opens w pliku manifestu.
  • Aplikacje otrzymały możliwość definiowania filtrów dla deserializacji danych, które mogą zależeć od kontekstu i być wybierane dynamicznie w związku z określonymi operacjami deserializacji. Określone filtry mają zastosowanie w skali całego maszynie wirtualnej (JVM-wide), tzn. obejmują nie tylko samą aplikację, ale także używane w aplikacji zewnętrzne biblioteki.
  • W Swing dodano metodę javax.swing.filechooser.FileSystemView.getSystemIcon do ładowania dużych ikon, co umożliwia lepsze formowanie interfejsu na ekranach o wysokiej gęstości pikseli (HighDPI).
  • W API java.net.DatagramSocket dodano wsparcie dla łączenia z grupami Multicast bez potrzeby używania oddzielnego API java.net.MulticastSocket.
  • Ulepszono narzędzie IGV (Ideal Graph Visualizer), które zapewnia interaktywną wizualizację pośredniego przedstawienia kodu w JIT-kompilatorze HotSpot VM C2.
  • W JavaDoc, podobnie jak w kompilatorze javac, przy wyświetlaniu błędu teraz podawany jest numer problematycznej linii w pliku źródłowym oraz miejsce błędu.
  • Dodano właściwość native.encoding, odzwierciedlającą nazwę systemowego kodowania znaków (UTF-8, koi8-r, cp1251 itp.).
  • Dodano interfejs java.time.InstantSource, umożliwiający manipulację czasem bez powiązania z strefą czasową.
  • Dodano API java.util.HexFormat do konwersji do reprezentacji szesnastkowej i z powrotem.
  • Do kompilatora dodano tryb blackhole, który wyłącza operacje wyjątków zbędnego kodu (dead-code elimination), co może być użyte podczas testów wydajności.
  • W Runtime dodano opcję „-Xlog:async” do rejestrowania logów w trybie asynchronicznym.
  • Podczas nawiązywania zabezpieczonych połączeń domyślnie używany jest TLS 1.3 (wcześniej używano TLS 1.2).
  • Przeniesiono do kategorii planowanych do usunięcia wcześniej ogłoszone przestarzałe API Applet (java.applet.Applet*, javax.swing.JApplet), stosowane do uruchamiania aplikacji Java w przeglądarkach (straciło aktualność po zaprzestaniu wsparcia dla wtyczki Java w przeglądarkach).
  • Przeniesiono do kategorii planowanych do usunięcia Security Manager, który od dawna stracił aktualność i stał się zbędny po zaprzestaniu wsparcia dla wtyczki przeglądarkowej.
  • Usunięto mechanizm RMI Activation, który stał się przestarzały, został przeniesiony do opcji jeszcze w Java 8 i jest rzadko używany w nowoczesnej praktyce.
  • Z SDK usunięto eksperymentalny kompilator, który wspierał JIT (just-in-time) dla dynamicznej kompilacji kodu Java dla HotSpot JVM, a także tryb kompilacji wyprzedzającej (AOT, ahead-of-time) klas w kod maszynowy przed uruchomieniem maszyny wirtualnej. Kompilator został napisany w Javie i oparty na dorobku projektu Graal. Zauważono, że utrzymanie kompilatora wymaga dużych nakładów pracy, które nie są uzasadnione w warunkach braku zainteresowania wśród deweloperów.

Ź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