wydanie Javy SE 18

Po sześciu miesiącach prac rozwojowych firma Oracle wydała platformę Java SE 18 (Java Platform, Standard Edition 18), która wykorzystuje projekt open source OpenJDK jako implementację referencyjną. Z wyjątkiem usunięcia niektórych przestarzałych funkcji, Java SE 18 zachowuje kompatybilność wsteczną z poprzednimi wersjami platformy Java — większość wcześniej napisanych projektów Java będzie nadal działać bez modyfikacji, gdy zostaną uruchomione w nowej wersji. Gotowe do zainstalowania wersje Java SE 18 (JDK, JRE i Server JRE) są przygotowane dla systemów Linux (x86_64, AArch64), Windows (x86_64) i macOS (x86_64, AArch64). Opracowana w ramach projektu OpenJDK implementacja referencyjna Java 18 jest w pełni otwarta na licencji GPLv2 z wyjątkami GNU ClassPath, aby umożliwić dynamiczne łączenie z produktami komercyjnymi.

Java SE 18 jest sklasyfikowana jako zwykła wersja wsparcia, z aktualizacjami, które zostaną wydane przed kolejną wersją. Gałąź wsparcia długoterminowego (LTS) powinna być Java SE 17, która będzie otrzymywać aktualizacje do 2029 roku. Przypomnijmy, że począwszy od wydania Java 10, projekt przeszedł na nowy proces rozwoju, co oznacza krótszy cykl tworzenia nowych wydań. Nowa funkcjonalność jest obecnie rozwijana w jednej, stale aktualizowanej gałęzi głównej, która zawiera już dokonane zmiany iz której gałęzie są rozgałęziane co pół roku w celu ustabilizowania nowych wydań.

Nowe funkcje w Javie 18 obejmują:

  • Domyślnie kodowanie to UTF-8. Interfejsy API Java przetwarzające dane tekstowe w oparciu o kodowanie znaków będą teraz domyślnie używać UTF-8 na wszystkich platformach, niezależnie od ustawień systemowych i ustawień regionalnych. Aby powrócić do starego zachowania, w którym kodowanie jest wybierane na podstawie ustawień regionalnych systemu, możesz użyć opcji „-Dfile.encoding=COMPAT”.
  • Pakiet zawiera pakiet com.sun.net.httpserver, który zawiera narzędzie jwebserver i API biblioteki z implementacją prostego serwera http do serwowania treści statycznych (nie są obsługiwane CGI ani procedury obsługi podobne do serwletów). Wbudowany serwer HTTP nie jest zoptymalizowany pod kątem obciążeń i nie obsługuje kontroli dostępu ani uwierzytelniania, ponieważ jest przeznaczony przede wszystkim do wykorzystania w procesie rozwoju do prototypowania, debugowania i testowania projektów.
  • JavaDoc zapewnia obsługę tagu „@snippet” umożliwiającego osadzanie działających przykładów i fragmentów kodu w dokumentacji API, gdzie można używać narzędzi do sprawdzania poprawności, podświetlania składni i integracji z IDE.
  • Przeprojektowano implementację API java.lang.reflect (Core Reflection), służącego do pozyskiwania informacji o metodach, polach i konstruktorach klas, a także dostępu do wewnętrznej struktury klas. Sam interfejs API java.lang.reflect pozostaje niezmieniony, ale jest teraz zaimplementowany przy użyciu uchwytów metod dostarczonych przez moduł java.lang.invoke, zamiast korzystać z generatorów kodu bajtowego. Zmiana pozwoliła nam ujednolicić implementacje java.lang.reflect i java.lang.invoke oraz uprościć ich konserwację.
  • Zaproponowano trzecią wersję zapoznawczą Vector API, udostępniającą funkcje obliczeń wektorowych, które są wykonywane przy użyciu instrukcji wektorowych na procesorach x86_64 i AArch64 i umożliwiają jednoczesne stosowanie operacji na wielu wartościach (SIMD). W przeciwieństwie do możliwości kompilatora HotSpot JIT do automatycznej wektoryzacji operacji skalarnych, nowy interfejs API umożliwia jawną kontrolę wektoryzacji dla równoległego przetwarzania danych.
  • Dodano interfejs SPI (interfejs dostawcy usług) do rozpoznawania nazw hostów i adresów IP, umożliwiając użycie alternatywnych programów tłumaczących w java.net.InetAddress, które nie są powiązane z modułami obsługi oferowanymi przez system operacyjny.
  • Dostępna jest druga wersja zapoznawcza interfejsu API funkcji zagranicznych i pamięci, umożliwiająca aplikacjom interakcję z kodem i danymi poza środowiskiem wykonawczym Java. Nowy interfejs API umożliwia wydajne wywoływanie funkcji innych niż JVM i uzyskiwanie dostępu do pamięci zarządzanej przez inną maszynę. Można na przykład wywoływać funkcje z zewnętrznych bibliotek współdzielonych i uzyskiwać dostęp do danych procesowych bez użycia JNI.
  • Dodano drugą eksperymentalną implementację dopasowywania wzorców w wyrażeniach typu „switch”, pozwalającą na użycie elastycznych wzorców w etykietach „case” zamiast dokładnych wartości, obejmujących jednocześnie szereg wartości, dla których wcześniej konieczne było użycie kłopotliwe łańcuchy wyrażeń „if...else”. Obiekt o = 123L; String sformatowany = przełącznik (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("podwójne %f", d); case String s -> String.format("Ciąg %s", s); domyślnie -> o.toString(); };
  • Mechanizm finalizacji i powiązane z nim metody, takie jak Object.finalize(), Enum.finalize(), Runtime.runFinalization() i System.runFinalization() są przestarzałe i zostaną wyłączone w przyszłej wersji.
  • Moduły zbierające elementy bezużyteczne ZGC (Z Garbage Collector), SerialGC i ParallelGC obsługują deduplikację wierszy.

Źródło: opennet.ru

Dodaj komentarz