Marzec zadomowił się już na całego, a skoro tak to musimy przypomnieć, że jeszcze tylko kilka dni i dokładnie 19 marca światło dzienne ujrzy Java 12 w wersji GA (General Availability).
Trzeba przyznać, że szybko to idzie. Jeszcze nie zdążyliśmy się nacieszyć w naszych projektach Javą 11, a już za chwilę będzie się trzeba przełączać na 12.
Pytanie tylko czy na pewno trzeba? Na to pytanie postaramy się odpowiedzieć analizując listę zmian i nowości wprowadzonych w najnowszej wersji.
Java 12 - 19 Marca 2019
-
Switch Expressions - Nowe możliwości w tworzeniu kodu z użyciem słowa kluczowego switch. Od tej pory zamiast używać mało
czytelnych i zajmujących dużo miejsca bloków, możemy skorzystać ze składni w postaci:
Tak więc zamiast dotychczasowego zapisu w postaci instrukcji możemy osiągnąć ten sam rezultat stosując nowy dużo krótszy zapis (wyrażenie):
Oprócz tego możemy teraz używać wyrażenia switch, aby uprościć dosyć często spotykany problem ustawiania jednej zmiennej
na różne wartości w zależności od stałej. Instrukcja switch występuje wtedy w roli zwykłej metody zwracającej wartość:
W przypadku gdy po prawej stronie znaku -> potrzebujemy pełnego bloku (zamiast pojedynczego wyrażenia), możemy skorzystać z rozszerzonej instrukcji break.
Umożliwia ona przyjęcie argumentu, który staje się wartością otaczającego wyrażenia switch:
Zmiany dotyczące instrukcji switch są jednym z kroków przygotwujących Javę pod kątem wprowadzenia
wsparcia do obsługi dopasowania wzorców Pattern Matching (JEP 305).
Appa Notka.
Na razie nowa wersja switch-a jest funkcjonalnością eksperymentalną i aby z niej skorzystać musimy kompilować nasze źródła z opcją --enable-preview.
Jeśli używamy Eclipse'a możemy to ustawić wchodząc do menu Window > Preferences > Java > Compiler. Tam zaznaczamy opcję "Enable preview features".
-
Promptly Return Unused Committed Memory from G1 - Usprawnienie Garbage Collectora G1 w kierunku automatycznego zwracania pamięci z Javy do systemu operacyjnego, gdy pamięć ta jest nieużywana.
Do tej pory (do Javy w wersji 11) odśmiecacz zwraca pamięć tylko w pełnym cyklu GC lub w cyklu równoczesnym. Takie zachowanie jest szczególnie niekorzystne w środowiskach kontenerowych, w których bardzo często opłaty dokonywane są za zużycie zasobów.
Powoduje to, że z jednej strony klienci płacą cały czas, a z drugiej że dostawcy usług w chmurze nie są w stanie w pełni wykorzystać swojego sprzętu.
Od Javy 12 pamięć jest więc odśmiecana dużo szybciej.
Testy z prototypami tego rozwiązania pokazały, że w przypadku środowiska zbudowanego z użyciem Tomcata, takie rozwiązanie może zmniejszyć ilość pamięci zajętej przez maszynę wirtualną Javy o 85%!
Wszystko zależy od faktycznego, bieżącego wykorzystania pamięci. Jeśli w ciągu dnia serwer obsłużył wiele żądań, a w nocy był bezczynny to pamięć nie pozostawała zajęta i oszczędność na tym poziomie
była jak najbardziej osiągalna.
-
Default CDS Archives - Ulepszenie procesu tworzenia JDK, tak aby już w trakcie kompilacji było generowane archiwum udostępniające dane klas, co przyspieszy
czas startu maszyny i to bez użycia dodatkowej konfiguracji (występującej do tej pory pod postacią Xshare:dump).
-
Shenandoah - Nowy algorytm Garbage Collector (GC), który zmniejsza czasy przerwy GC wykonując odśmiecanie równolegle z
uruchomionymi wątkami Javy. Działa to podobnie do G1, jednak idzie o krok dalej poprzez wykonanie Concurrent Evacuation, co oznacza
kopiowanie obiektów z zestawu kolekcji do innych regionów. Więcej w tym temacie można przeczytać wchodząc na stronę wiki projektu
Shenandoah.
-
Microbenchmark Suite - Zestaw narzędzi do testów kodu źródłowego JDK. Bazuje na Java Microbenchmark Harness,
które jest rozwiązaniem umożliwiającym uruchamianie i analizowanie testów porównawczych. Microbenchmark Suite upraszcza obsługę istniejących testów oraz tworzenie nowych.
Zawiera startowy zbiór około stu testów porównawczych.
-
JVM Constants API - Interfejs API umożliwiający modelowanie opisów kluczowych plików klas i artefaktów używanych podczas uruchamiania programu,
w szczególności stałych ładowanych z puli.
-
One AArch64 Port, Not Two - Usunięcie wszystkich źródeł związanych z portem ARM64, przy jednoczesnym zachowaniu 32 bitowego portu ARM i 64 bitowego portu Aarch64.
Dzięki temu programiści będą mogli ukierunkować wysiłki w swojej pracy na pojedynczą 64-bitową implementację portu AArch64.
-
Abortable Mixed Collections for G1 - Zmiana w funkcjonowaniu zbiorów mieszanych w w Garbage Collector G1, a dokładniej wprowadzenie przerwania w pracy kolekcji mieszanych jeśli przekroczyły one dostępny czas pauzy.
Lista zmian nie jest może długa, ale za to na pewno godna uwagi. Mamy tutaj do czynienia zarówno z ulepszeniami składni języka (instrukcja
switch) jak i z optymalizacją wydajności. Na pewno warto wyróżnić szybsze odśmiecanie pamięci, co często nie pozostaje bez znaczenia w przypadku projektów,
w których nie można sobie pozwolić na dodatkowe koszty z tytułu wykorzystywania większych zasobów pamięci RAM. Reasumując, Java 12 wydaje się być warta tego, by zainwestować trochę czasu w przełączenie się na nią w realizowanych projektach.
Autor: Jarek Klimas
Data: 09 marca 2019
Labele:Backend, Poziom podstawowy, Java
Linki:
https://openjdk.java.net/projects/jdk/12
https://openjdk.java.net/jeps/305
https://wiki.openjdk.java.net/display/shenandoah/Main
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!