Wydanie Java SE 18

Po sześciu miesiącach prac rozwojowych firma Oracle wydała platformę Java SE 18 (Java Platform, Standard Edition 18), której wzorcową implementacją jest otwarty projekt OpenJDK. Z wyjątkiem usunięcia niektórych przestarzałych funkcjonalności, Java SE 18 zachowuje wsteczną zgodność z wcześniejszymi wersjami platformy Java - większość wcześniej napisanych projektów Java będzie działająca po uruchomieniu na nowej wersji bez konieczności wprowadzania zmian. Gotowe do zainstalowania paczki Java SE 18 (JDK, JRE i Server JRE) są przygotowane dla systemów Linux (x86_64, AArch64), Windows (x86_64) oraz macOS (x86_64, AArch64). Wzorcowa implementacja Java 18 opracowana w ramach projektu OpenJDK jest całkowicie otwarta na licencji GPLv2 z wyjątkami GNU ClassPath, które pozwalają na dynamiczne łączenie z komercyjnymi produktami.

Java SE 18 należy do kategorii wydań z typowym wsparciem, aktualizacje będą wydawane do czasu następnej wersji. Jako wersję z długoterminowym wsparciem (LTS) należy stosować Java SE 17, dla której aktualizacje będą wydawane do roku 2029. Przypomnijmy, że od wydania Java 10 projekt przeszedł na nowy proces rozwoju, który przewiduje krótszy cykl wydawania nowych wersji. Nowa funkcjonalność powstaje teraz w jednej, stale aktualizowanej gałęzi master, do której włączane są gotowe zmiany, a której gałęzie stabilizacyjne są odgałęziane co sześć miesięcy.

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

  • Domyślnie używana jest kodowanie UTF-8. Java API, które przetwarzają dane tekstowe z uwzględnieniem kodowania znaków, będą teraz domyślnie korzystać z UTF-8 na wszystkich platformach, niezależnie od ustawień systemowych i wybranej lokalizacji. Aby przywrócić stare zachowanie, w którym kodowanie jest wybierane zgodnie z lokalizacją systemową, można użyć parametru „-Dfile.encoding=COMPAT.”
  • W skład pakietu wchodzi com.sun.net.httpserver, który zawiera narzędzie jwebserver oraz interfejs API bibliotecznego z implementacją prostego serwera http do dostarczania statycznych treści (nie są obsługiwane obsługiwacze CGI i podobne jak servlet). Wbudowany serwer http nie jest zoptymalizowany do obciążeń roboczych i nie obsługuje kontroli dostępu ani uwierzytelniania, ponieważ jest głównie skierowany do wykorzystania w procesie rozwoju, do tworzenia prototypów, debugowania i testowania projektów.
  • W JavaDoc zrealizowano obsługę tagu „@snippet” do wbudowywania działających przykładów i fragmentów kodu w dokumentację API, w której można stosować narzędzia do weryfikacji poprawności, podświetlania składni oraz integracji z IDE.
  • Przeprojektowano implementację API java.lang.reflect (Core Reflection), które ma na celu uzyskiwanie informacji o metodach, polach i konstruktorach klas, a także dostęp do wewnętrznej struktury klas. Same API java.lang.reflect pozostało bez zmian, ale teraz jest realizowane za pomocą deskryptorów metod (method handles) udostępnianych przez moduł java.lang.invoke, zamiast stosowania generatorów bajtkodów. Zmiana ta pozwoliła na ujednolicenie implementacji java.lang.reflect i java.lang.invoke, oraz uproszczenie ich konserwacji.
  • Proponowana jest trzecia wstępna implementacja API Vector, która oferuje funkcje do obliczeń wektorowych, wykonywanych przy użyciu instrukcji wektorowych procesorów x86_64 i AArch64, pozwalających na jednoczesne zastosowanie operacji do wielu wartości (SIMD). W przeciwieństwie do możliwości automatycznej wektoryzacji operacji skalarowych oferowanych w kompilatorze JIT HotSpot, nowe API daje możliwość jawnego zarządzania wektoryzacją dla równolegle przetwarzanych danych.
  • Dodano interfejs SPI (interfejs dostawcy usług) do rozwiązywania nazw hostów i adresów IP, pozwalający na wykorzystanie w java.net.InetAddress alternatywnych resolverów, niezwiązanych z obsługiwaczami proponowanymi przez system operacyjny.
  • Zaproponowano drugą wstępną wersję 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 umożliwia efektywne wywoływanie funkcji działających poza JVM oraz dostęp do pamięci niezarządzanej przez JVM. Na przykład, można wywoływać funkcje z zewnętrznych bibliotek współdzielonych i uzyskiwać dostęp do danych procesów bez korzystania z JNI.
  • Dodano drugą eksperymentalną wersję dopasowywania wzorców w wyrażeniach „switch”, co pozwala na używanie elastycznych wzorców w etykietach „case”, obejmujących serię wartości, których wcześniej trzeba było używać w rozbudowanych łańcuchach wyrażeń „if...else”. 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(); };
  • Mechanizm finalizacji został oznaczony jako nieaktualny i zostanie wyłączony w jednej z następnych wersji, a także związane z nim metody, takie jak Object.finalize(), Enum.finalize(), Runtime.runFinalization() oraz System.runFinalization().
  • W zbieraczach śmieci ZGC (Z Garbage Collector), SerialGC i ParallelGC wprowadzono wsparcie dla deduplikacji stringó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