wydanie Javy SE 20

Po sześciu miesiącach prac rozwojowych firma Oracle wydała platformę Java SE 20 (Java Platform, Standard Edition 20), która wykorzystuje projekt open source OpenJDK jako implementację referencyjną. Z wyjątkiem usunięcia niektórych przestarzałych funkcji, Java SE 20 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 20 (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 20 jest w pełni otwarta na licencji GPLv2 z wyjątkami GNU ClassPath, aby umożliwić dynamiczne łączenie z produktami komercyjnymi.

Java SE 20 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 20 obejmują:

  • Zaproponowano wstępne wsparcie dla Scoped Values, które umożliwia udostępnianie niezmiennych danych w wątkach oraz wydajną wymianę danych pomiędzy wątkami potomnymi (wartości są dziedziczone). Scoped Values ​​są opracowywane w celu zastąpienia mechanizmu zmiennych lokalnych wątków i są bardziej wydajne przy użyciu bardzo dużej liczby wirtualnych wątków (tysiące i miliony wątków). Główna różnica między Scoped Values ​​a zmiennymi lokalnymi wątku polega na tym, że te pierwsze są zapisywane raz, nie można ich później zmienić i pozostają dostępne tylko na czas wykonywania wątku. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Żądanie żądania, odpowiedź odpowiedzi) { var level = (request. isAuthorized()? ADMIN : GOŚĆ); var użytkownik = nowy użytkownik (poziom); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(żądanie, odpowiedź)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) wyrzuć nowy wyjątek InvalidUserException(); zwróć nowe połączenie DB(…); } }
  • Dodano drugą tymczasową implementację wzorców rekordów, rozszerzającą możliwości dopasowywania wzorców języka Java 16 w celu analizowania wartości klas typu rekord. Na przykład: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Dodano czwartą wstępną implementację dopasowywania wzorców w wyrażeniach switch, która pozwala na stosowanie elastycznych szablonów w etykietach przypadków obejmujących jednocześnie serię wartości, dla których wcześniej stosowano uciążliwe łańcuchy instrukcji if...else. static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); sprawa Długi l -> String.format("długi %d", l); przypadek Podwójne d -> String.format("podwójne %f", d); case String s -> String.format("Ciąg znaków %s", s); domyślnie -> o.toString(); }; }
  • Dodano drugą wstępną implementację API FFM (Foreign Function & Memory), która pozwala organizować interakcję programów Java z zewnętrznym kodem i danymi poprzez wywoływanie funkcji z zewnętrznych bibliotek i dostęp do pamięci poza JVM.
  • Dodano drugą wstępną implementację wątków wirtualnych, które są lekkimi wątkami, znacznie upraszczającymi pisanie i utrzymywanie wysokowydajnych aplikacji wielowątkowych.
  • Dodano drugi wariant eksperymentalnego API Structured Parallelism, aby uprościć tworzenie aplikacji wielowątkowych, traktując wiele zadań uruchamianych w różnych wątkach jako pojedynczą jednostkę.
  • Dodano piątą wstępną implementację Vector API, udostępniającą funkcje do obliczeń wektorowych, które są wykonywane przy użyciu instrukcji wektorowych na procesorach x86_64 i AArch64 i umożliwiają wykonywanie operacji na wielu wartościach jednocześnie (SIMD). W przeciwieństwie do możliwości zapewnianych przez kompilator HotSpot JIT do autowektoryzacji operacji skalarnych, nowe API umożliwia jawne sterowanie wektoryzacją dla równoległego przetwarzania danych.

Źródło: opennet.ru

Dodaj komentarz