Po sześciu miesiącach prac rozwojowych firma Oracle wydała platformę Java SE 19 (Java Platform, Standard Edition 19), której wzorcowa implementacja oparta jest na otwartym projekcie OpenJDK. Z wyjątkiem usunięcia kilku przestarzałych funkcji w Java SE 19, zachowano zgodność wsteczną z wcześniejszymi wersjami platformy Java — większość wcześniej napisanych projektów Java będzie działać bez zmian na nowej wersji. Gotowe do instalacji zestawy Java SE 19 (JDK, JRE i Server JRE) zostały przygotowane dla systemów Linux (x86_64, AArch64), Windows (x86_64) oraz macOS (x86_64, AArch64). Opracowana w ramach projektu OpenJDK wzorcowa implementacja Java 19 jest całkowicie otwarta na licencji GPLv2 z wyjątkami GNU ClassPath, które umożliwiają dynamiczne powiązanie z komercyjnymi produktami.
Java SE 19 zalicza się do kategorii wydań o standardowym czasie wsparcia, z aktualizacjami wydawanymi do czasu następnej wersji. Jako wersję z długoterminowym wsparciem (LTS) należy stosować Java SE 17, której aktualizacje będą wydawane do 2029 roku. Przypominamy, że od wydania Java 10 projekt przeszedł na nowy proces rozwoju, zakładający krótszy cykl tworzenia nowych wydań. Nowe funkcjonalności są teraz rozwijane w jednej stale aktualizowanej gałęzi master, do której wprowadzane są gotowe zmiany, a co sześć miesięcy są odgałęziane gałęzie do stabilizacji nowych wydań.
Wśród nowości w Java 19 można wymienić:
- Wprowadzono wstępną obsługę wzorców rekordów (record pattern), rozszerzającą wprowadzenie możliwości dopasowania wzorca w Java 16, które służy do analizy wartości klas typu record. Na przykład: record Point(int x, int y) {} void printSum(Object o) { if (o instanceof Point(int x, int y)) { System.out.println(x+y); } }
- W wersjach dla Linux zapewniono wsparcie dla architektury RISC-V.
- Dodano wstępną obsługę API FFM (Foreign Function & Memory), które umożliwia interakcję programów Java z zewnętrznym kodem i danymi poprzez wywołanie funkcji z zewnętrznych bibliotek oraz dostęp do pamięci poza JVM.
- Dodano wsparcie dla wirtualnych wątków, które są lekkimi wątkami, znacznie ułatwiającymi pisanie i utrzymanie wysokowydajnych aplikacji wielowątkowych.
- Zaproponowano czwartą wstępną implementację API Vector, oferującą funkcje dla obliczeń wektorowych, które są realizowane przy użyciu instrukcji wektorowych procesorów x86_64 i AArch64, umożliwiających jednoczesne zastosowanie operacji na wielu wartościach (SIMD). W przeciwieństwie do możliwości automatycznej wektoryzacji operacji skalarnej, oferowanych w kompilatorze JIT HotSpot, nowe API umożliwia bezpośrednie zarządzanie wektoryzacją do równoległego przetwarzania danych.
- Dodano trzecią eksperymentalną implementację dopasowywania wzorca w instrukcjach „switch”, pozwalającą na użycie w etykietach „case” elastycznych wzorców obejmujących od razu serię wartości, dla których wcześniej konieczne było użycie rozbudowanych łańcuchów instrukcji „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(); };
- Dodano eksperymentalne API dla zorganizowanego równoległego przetwarzania, upraszczające rozwój aplikacji wielowątkowych poprzez przetwarzanie kilku zadań realizowanych w różnych wątkach jako jednego bloku.
Źródło: opennet.ru
