Kolejna, trzynasta wersja Javy ujrzała dzisiaj światło dzienne. Java 13 wprowadza kila małych nowości. Zmiany w samym języku są tylko dwie, a jedna z nich jest modyfikacją już wprowadzonej wcześniej zmiany w Javie 12, za to więcej zmian dotknęło samą platformę JVM.
Switch Expressions (Preview)
To już kolejna odsłona zmodyfikowanej instrukcji switch. Pierwsza miała miejsce w Javie 12. Pisałem o tym w artykule o Javie 12 (od poprzedniej wersji niewiele się zmieniło). W poprzedniej wersji instrukcja break
mogła zwracać wynik, co teraz zastępuje instrukcją yield
. Opcja ta jest dostępna ciągle w trybie preview, co znaczy, że aby ją włączyć, potrzebna jest dodatkowa flaga przy uruchomieniu JVM --enable-preview
.
Link do: JEP 354
Text Blocks (Preview)
W końcu w Javie pojawią się wielolinijkowe bloki tekstowe. Sporo języków ma od dawna wbudowaną obsługę takich bloków np. Groovy, Python. Ułatwia to pisanie wielolinijkowych testów w kodzie źródłowym.
A w kodzie obecnie wygląda to tak:
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";
i w Javie 13:
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;
Może nie jest to najbardziej przydatna funkcja, ale czasem może się przydać. Ta funkcja też jest dostępna w trybie preview.
Link do: JEP 355
ZGC: Uncommit Unused Memory
Usprawnienie garbage collectora ZGC tak, by zwracał nieużywaną pamięć do systemu operacyjnego. Do tej pory ZGC nie potrafił tego, nawet jeśli pamięć była niewykorzystywana przez długi czas.
Przypomnę jeszcze, że ZGC to taki GC, który ma zapewniać bardzo niskie pauzy przy odśmiecaniu sterty (Heap) bardzo dużych rozmiarów.
Link do: JEP 351
Reimplement the Legacy Socket API
Zmiana miała na celu przeimplementowanie starego api Javy i C, z którego korzystają pakiety java.net.Socket
i java.net.ServerSocket
tak, by wprowadzić bardziej nowoczesną implementację. Pozwoli to łatwiej zarządzać i debugować nowe api.
Link do: JEP 353
Dynamic CDS Archives
Zmiana ta rozszerza mechanizm CDS (class-data sharing) poprzez generowanie na koniec życia aplikacji archiwum z klasami załadowanymi z aplikacji i bibliotek, które nie znalazły się w podstawowej warstwie archiwum CDS.
Link do: JEP 350
Podsumowanie
Półroczny cykl wydawniczy daje nam wiele małych zmian i optymalizacji. Większość z nich nie jest jakoś super znacząca, ale zebrane razem stanowią dużą wartość dla użytkowników platformy Java. Nową wersję OpenJdk można pobrać tutaj.
Źródła:
https://openjdk.java.net/projects/jdk/13/