Java 14 wchodzi do nas z 16-nastoma nowymi zmianami. Można je sklasyfikować w dwóch kategoriach. Pierwsza z nich tyczy się optymalizacji JVM. Druga kategoria – znacznie ciekawsza dla programistów, czyli zmiany jakie możemy uświadczyć w kodzie.
W pierwszej części artykułu opisze zmiany dotyczące optymalizacji JVM, natomiast w drugiej części artykułu w postaci wideo-szkolenia pokaże Ci jakie widoczne w kodzie zmiany pojawiły się w Java 14.
Java 14 – nowości
Poniżej lista zmian. Dokładny opis zmian powstał na bazie informacji opisanych w ramach dokumentu OpenJDK 14.
1. NUMA-Aware Memory Allocation for G1 [ JEP 345]
Garbage First (G1) zyskał usprawnienie, przez które znacznie poprawia się wydajność na komputerach wielordzeniowych.
Nowoczesne maszyny z wieloma rdzeniami mają nierównomierny dostęp do pamięci (non-uniform memory access – NUMA), co oznacza, że pamięć nie jest jednakowo oddalona od każdego rdzenia.
Wdrożenie nowego przydziały pamięci pozwoliło na rozwiązanie tego problemu.
2. JFR Event Streaming [JEP 349]
Java 14 zapewnia interfejs API dla DK Flight, który umożliwia stałe monitorowanie procesów aplikacji.
Można rejestrować taki sam zestaw zdarzeń, jak w przypadku transmisji strumieniowej, przy czym możliwy narzut wydajnościowy jest mniejszy niż 1%.
Pakiet jdk.jfr.consumer, zyskał również rozszerzenie o funkcję asynchronicznego subskrybowania zdarzeń.
3. Non-Volatile Mapped Byte Buffers [JEP 352]
Został wprowadzony nowy zestaw klas i rozszerzenie możliwości MappedByteBuffer o dostęp do pamięci nieulotnej (non-volatile memory – NVM). Od teraz MappedByteBuffer może być użyty tylko do odczytu lub zapisu. Dodatkowo klasa ManagementFactory umożliwia uzyskanie listy instancji BufferPoolMXBean przy użyciu metody getPlatformMXBeans().
4. Deprecate the Solaris and SPARC Ports [JEP 362]
Przestarzałe systemy operacyjne – Solaris/SPARC, Solaris/x64 i Linux/SPARC nadal posiadają aktywne porty. W tej wersji JDK zostają one oznaczone jako przestarzałe i w przyszłości będą usunięte.
5. Remove the Concurrent Mark Sweep (CMS) Garbage Collector [JEP 363]
Java 9 oznaczyła Concurrent Mark Sweep jako deprecated. Od tego czasu minęły 2 lata i od bieżącego wydania ten Garbage Collector odchodzi w zapomnienie.
6. ZGC on macOS [JEP 364] + ZGC on Windows [JEP 365]
Pierwotnie bardzo wydajny Garbage Collector ZGC (mający premierę w Java 11), działał jedynie pod kontrolą Linuxa. Od teraz zyskuje on pełne wsparcie na systemach operacyjnych macOS, oraz Windows.
7. Deprecate the ParallelScavenge + SerialOld GC Combination [JEP 366]
Parallel Scavenge i Serial Old to algorytmy wyrzucania bezużytecznych elementów. Wykorzystanie ich kombinacji zostało oznaczone jako deprecated
-XX:+UseParallelGC -XX:-UseParallelOldG
Również wykorzystanie:
-XX:UseParallelOldGC
zostało oflagowane deprecated, ponieważ służy ono do odznaczenia równoległego GC starej generacji.
W rezultacie każde celowe użycie opcji UseParallelOldGC spowoduje wyświetlenie deprecation warning.
8. Remove the Pack200 Tools and API [JEP 367]
Pack200 pozwala na kompresję plików, która istnieje od Java 1.5.
Zostały usunięte narzędzia pack200, unpack200 oraz interfejs API pack200 z pakietu java.util.jar po tym tym jak Java 11 nadała im status deprecated.
9. Foreign-Memory Access API (Incubator) [JEP 370]
Trwają prace, aby począwszy od wersji JDK 14 stopniowo wdrażać API, które umożliwi aplikacjom Java na bezpieczny i wydajny dostęp do pamięci przechowywanej poza stertą Java. Interfejs API dostępu do pamięci obcej wprowadza trzy główne abstrakcje: MemorySegment, MemoryAddress i MemoryLayout.
Prace trwają co sugeruje status Incubator.
Zmiany widoczne w kodzie
Pozostałe zmiany widoczne w kodzie, oraz podsumowanie szkolenia znajdziesz na moim kanale YouTube:
Java 14 – czy warto? Dyskusja z ekspertami
Wraz z ekspertami Just Join IT toczymy dyskusję na temat zmian wprowadzonych w JDK 14, czy warto się nimi zainteresować.
A czy Ty przesiadasz się już na Java 14? 🙂