Czas szybko płynie. Ledwo był marzec, w którym opisywaliśmy
Javę 12, a tu już mamy wrzesień i nadchodzącą wielkimi krokami Javę 13.
Pytanie zasadnicze brzmi (jak zawsze) - jaka jest lista nowości/zmian w nowej wersji? Odpowiemy na to pytanie w kilku najbliższych akapitach.
Java 13 - 17 Września 2019
-
Switch Expressions - Wyrażenia te pojawiły się już co prawda w wersji dwunastej, ale w trzynastce nadal jest to funkcjonalność eksperymentalna.
Obecnie wprowadzono nowe słowo kluczowe - yield, które zastępuje dotychczas używanego break-a. Pamiętajmy jednak, że dotyczy to wyrażenia switch (zwracającego wartość),
a nie instrukcji switch (tej używanej od dawna w Javie i nie zwracającej wartości).
Tak więc zamiast dotychczasowego zapisu możemy osiągnąć ten sam rezultat stosując nowy zapis:
Możemy też użyć konstrukcji blokowej w postaci:
- Text Blocks - Bloki tekstowe to coś na co czekamy z niecierpliwością. Niestety występują one również jako funkcjonalność eksperymentalna. Niemniej daje to nadzieje, że
być może już niedługo trafią do powszechnego użycia. Na czym polegają bloki tekstowe? A więc taki blok to nic innego jak wieloliniowy ciąg znaków, którego nie musimy rozdzielać znakami specjalnymi
po zakończeniu każdej z linii. Do tej pory coś takiego funkcjonowało już w innych językach, na przykład w Pythonie.
Szczególnie przydatne jest to w kontekście użycia HTML-a lub SQL-a w pliku java.
Dla przykładu, w przypadku HTML-a, zamiast używać przestarzałej konstrukcji możemy osiągnąć ten sam rezultat stosując nowy, dużo czytelniejszy zapis:
W przypadky SQL-a wygląda to analogicznie:
-
Reimplement the Legacy Socket API - Zastąpienie implementacji dostarczanej przez interfejsy java.net.Socket i java.net.ServerSocket
prostszą i bardziej nowoczesną implementacją, która jest przy okazji łatwiejsza w debugowaniu.
-
Dynamic CDS Archives - Dalsze prace usprawniające mechanizm współdzielenia danych klas w aplikacji (o domyślnym trybie wspominaliśmy podczas opisu Javy 12).
Obecnie chodzi o ty, by umożliwić dynamiczną archiwizację klas po zakończeniu wykonywania aplikacji Java.
-
ZGC: Uncommit Unused Memory - Ulepszenie garbage collectora ZGC (znanego również pod nazwą The Z Garbage Collector), polegające na stworzeniu skalowalnego
pojemnika o niskim opóźnieniu, zdolnego do obsługi heapów (przestrzeni do alokacji pamięci podczas uruchamiania) o dużej wielkości - od kilku gigabajtów do wielu terabajtów.
Przy tym proces nie powinien zajmować więcej niż 10ms.
ZGC obecnie nie zwraca pamięci do systemu operacyjnego, nawet jeśli pamięć ta była nieużywana przez długi czas. To zachowanie nie jest optymalne dla wszystkich typów aplikacji
i środowisk, ale szczególnie dla tych, w których kluczowe jest zużycie pamięci (na przykład środowiska kontenerowe opłacane według użycia zasobów).
Dodatkową motywacją do wdrożenia tego udoskonalenia było to, że zarówno garbage collector G1 jak i Shenandoah zapewniały tę funkcjonalność już nieco wcześniej.
Biorąc pod uwagę to, że jedyne stricte programistyczne funkcjonalności są dostępne w wersji eksperymentalnej, a reszta to mechanizmy
raczej wewnętrzne, można stwierdzić, że nowa wersja Javy dla wielu pozostanie raczej zwykłą ciekawostką.
Pewien wyjątek stanowi jedynie kwestia socketów. Tutaj, jeśli ktoś chciałby oprogramować gniazda w prostszy i bardziej elegancki sposób, to
przejście na Javę 13 wydaje się być dobrym pomysłem. Tak samo sprawa wygląda w przypadku, gdy zależy nam na podniesieniu wydajności działania odśmieczacza pamięci ZGC.
Autor: Jarek Klimas
Data: 30 sierpnia 2019
Labele:Backend, Poziom podstawowy, Java
Linki:
https://openjdk.java.net/projects/jdk/13
https://openjdk.java.net/projects/zgc
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?
Daj nam znać co myślisz i skomentuj artykuł na facebooku!