Dzisiaj przyjrzymy się, co nowego pojawia się w Javie 16, która swój debiut w wersji GA ma 16 marca.
Jak widać, ponownie dzień miesiąca wydania zgadza się z numerem wersji Javy. Ciekawe co będzie, gdy dojedziemy do wersji 32,
co biorąc pod uwagę tempo wydawania kolejnych wersji, nie wydaje się wcale tak odległą perspektywą (jedyne...8 lat).
Na szczęście nie musimy się tym teraz zajmować. Obecnie interesuje nas to,
czego możemy się spodziewać po wersji 16. Zatem zaczynamy...
Java 16 - 16 marca 2021
-
Rekordy
Rekordy omawialiśmy już w artykule Kolejne nowości w Javie 14
oraz wspominaliśmy w Java 15 już we wrześniu.
Wreszcie pojawiła się finalna wersja tego rozwiązania.
O co w tym chodzi?
Otóż jednym z najczęstszych problemów związanych z Javą jest to, że aby klasa była użyteczna, trzeba napisać sporo powtarzalnego kodu, na przykład:
-
toString()
- hashCode
-
equals
- gettery
- publiczne konstruktory
W przypadku prostych klas domenowych metody te są zwykle nudne, powtarzalne i takie, które można łatwo wygenerować mechanicznie.
O ile środowiska IDE często zapewniają taką możliwość (lub dodatkowe biblioteki takie jak Lombok),
o tyle sam język do tej pory nie zapewniał żadnego sposobu, aby to zrobić.
Celem rekordów jest rozszerzenie składni języka Java i stworzenie sposobu na określenie,
że dana klasa to „pola i tylko pola”.
Dla takiej klasy kompilator może wygenerować wszystkie metody automatycznie, uwzględniając
wszystkie pola uczestniczące w metodach, takich jak hashCode czy equals.
Tak więc teraz, zamiast tworzyć klasę taką jak poniżej:
wystarczy stworzyć rekord:
I tyle. Tak, to właśnie takie proste!
-
Pattern Matching for instanceof
Finalna wersja rozwiązania, które omawiamy w artykule Java 14 już na horyzoncie.
Do podanego tam przykładu dołóżmy jeszcze jeden. Teraz zamiast takiego kodu:
możemy wykonać taki, dużo prostszy zapis:
Jak widać, kod od razu staje się bardziej czytelny.
- Sealed classes [preview]
Sealed classes omawialiśmy już w artykule Java 15 już we wrześniu.
Funkcjonalność nadal istnieje w postaci preview. Więcej o tych klasach napiszemy, gdy staną się rozwiązaniem finalnym.
-
Elastyczny metaspace
Poprawia alokację i zwalnianie pamięci metaspace w HotSpot JVM, co znacznie zmniejsza obciążenie modułu ładującego klasy oraz fragmentację pamięci.
W przypadku kodu działającego przez dłuższy czas, np. na serwerze po stronie backendu aplikacji może to znacznie poprawić wydajność działania systemu.
-
Migracja z Mercurial-a to Git-a
Do tej pory kod źródłowy OpenJDK był przechowywany w systemie kontroli wersji Mercurial.
Teraz projekt został przeniesiony do Git-a, a konkretnie do GitHub-a, gdzie będzie można go znaleźć pod adresem: https://github.com/openjdk.
-
Przeniesienie JDK na Alpine Linux
Przeniesienie JDK na Alpine Linux i na inne dystrybucje Linuksa, które używają musl * jako podstawowej biblioteki C, zarówno na architekturach x64, jak i AArch64.
Dystrybucja Linuxa Alpine Linux ze względu na małe rozmiary obrazów jest szeroko stosowana w środowiskach chmurowych.
Dodatkowo używając konsolidatora jlink, programista może zmniejszyć
rozmiar środowiska wykonawczego aplikacji Java, używając tylko modułów wymaganych do uruchomienia aplikacji.
* musl to standardowa biblioteka C przeznaczona dla systemów operacyjnych opartych na jądrze Linux, wydana na licencji MIT.
-
Włączenie funkcji języka C++ 14
W procesie kompilacji kodu źródłowego JDK zostaną włączone funkcje C++.
Oznacza to, że kod będzie kompilowany z opcją std = c ++ 14 na wszystkich platformach (Windows, Linux, macOS...).
Do wersji JDK 15, funkcje C++ były ograniczone do standardów języka C++ 98/03.
-
Obliczenia wektorowe [inkubator]
Rozwiązanie, które umożliwia wykonywanie obliczeń wektorowych (SIMD). Ta funkcjonalność jest na razie w inkubatorze, a więc kod znajduje się
w pakiecie jdk.incubator.vector.
Obliczenia wektorowe są obsługiwane przez instrukcje sprzętowe (gdy takowe są dostępne, np. SSE, AVX).
Oprócz powyższych nowości/zmian wprowadzono jeszcze kilka innych, w naszym odczuciu mniej istotnych.
Pełna lista dostępna jest pod adresem:
https://openjdk.java.net.
Okazuje się, że Java 16 to całkiem fajna Java. Z jednej strony postawiono w niej na wydajność (na przykład elastyczny metaspace),
a z drugiej niektóre istotne tematy wreszcie doczekały się finalizacji. Bardzo podobają nam się rekordy i "nowy"
instanceof,
ponieważ lubimy wszelkiego rodzaju uproszczenia. Dodatkowy plus za to, że OpenJDK zaparkował wreszcie na GitHubie.
Na koniec przypominamy, że działające przykłady z rekordem oraz operatorem
instanceof można znaleźć już od dawna w naszym
Kursie Java 8 do 14 i dalej.
Po podpięciu Javy 16 nie będzie już nawet konieczne włączanie trybu
preview.
Autor: Jarek Klimas
Data: 16 marca 2021
Labele:Backend, Poziom średniozaawansowany, Java
Linki:
https://openjdk.java.net
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!