JDK 14: Nowe funkcje w Javie 14

Java Development Kit (JDK) 14 dotarł do GA, dostarczając w wersji ogólnodostępnej do wdrożeń produkcyjnych. Aktualizacja do standardowej wersji Java obejmuje nowe możliwości, takie jak przesyłanie strumieniowe zdarzeń JDK Flight Recorder, dopasowywanie wzorców i wyrażenia przełączające. 

JDK 14 to wydanie funkcji Java, a nie wydanie długoterminowego wsparcia (LTS), po sześciomiesięcznym okresie wydawania Javy. JDK 14 otrzyma aktualizacje zabezpieczeń w kwietniu i lipcu, po czym zostanie zastąpiony przez JDK 15, również wersję inną niż LTS, która ma się ukazać we wrześniu. Bieżąca wersja LTS to JDK 11. 

Nowe funkcje i ulepszenia w JDK 14 obejmują:

  • JFR Event Streaming zapewnia interfejs API do ciągłego wykorzystywania danych JFR zarówno z aplikacji w trakcie, jak i poza procesem. JFR to narzędzie do zbierania danych profilowych i diagnostycznych dotyczących aplikacji Java i maszyny JVM w trakcie ich działania. Propozycja przesyłania strumieniowego zdarzeń rejestruje ten sam zestaw zdarzeń, co w przypadku braku przesyłania strumieniowego, z narzutem mniejszym niż jeden procent, jeśli to możliwe. Przesyłanie strumieniowe zdarzeń musi współistnieć z nagraniami, które nie są przesyłane strumieniowo, zarówno na dysku, jak i na pamięci. Motywacją do tej propozycji jest sytuacja, w której maszyna wirtualna HotSpot emituje ponad 500 punktów danych przy użyciu JFR, z których większość jest dostępna tylko poprzez analizowanie plików dziennika. Obecnie użytkownik musi rozpocząć nagrywanie, zatrzymać je, zrzucić zawartość na dysk, a następnie przeanalizować plik nagrania. Działa to dobrze w przypadku profilowania aplikacji, ale nie do celów monitorowania.Przykładem monitorowania użycia jest pulpit nawigacyjny, który wyświetla dynamiczne aktualizacje danych. Tworzenie nagrania wiąże się z narzutem, takim jak kopiowanie danych z repozytorium na dysku do oddzielnego pliku nagrania. Gdyby istniał sposób na odczytanie danych zapisywanych z repozytorium na dysku bez tworzenia nowego pliku nagrania, można by uniknąć wielu narzutów.
  • Planowane ulepszenie  NullPointerExceptionsdotyczy poprawy użyteczności wyjątków generowanych przez maszynę JVM poprzez dokładne opisanie, która zmienna jest pusta. Autorzy propozycji chcą dostarczyć pomocnych informacji programistom i personelowi pomocniczemu na temat przedwczesnego zakończenia programu oraz poprawić zrozumienie programu poprzez wyraźniejsze powiązanie dynamicznego wyjątku ze statycznym kodem programu. Jednym z celów jest zmniejszenie nieporozumień i obaw programistów NullPointerExceptions.
  • Nielotne mapowane bufory bajtowe dodałyby nowe tryby mapowania plików specyficzne dla JDK, które umożliwiają użycie interfejsu API FileChannel do tworzenia MappedByteBufferinstancji odwołujących się do pamięci nieulotnej (NVM). NVM umożliwia programistom tworzenie i aktualizowanie stanu programu w różnych przebiegach programu bez ponoszenia znacznych kosztów kopiowania lub tłumaczenia, których zwykle wymagają operacje wejścia i wyjścia. Jest to szczególnie istotne w przypadku programów transakcyjnych. Dlatego głównym celem tej propozycji ulepszenia JDK jest zapewnienie, że klienci mogą uzyskać dostęp do NVM i aktualizować go z poziomu programu Java w spójny i wydajny sposób. Drugorzędnym celem jest zaimplementowanie tego zachowania zatwierdzania przy użyciu ograniczonego, wewnętrznego interfejsu JDK zdefiniowanego w klasie Unsafe, tak aby mogło być ponownie użyte przez klasy inne niżMappedByteBufferktóre mogą wymagać zobowiązania się do NVM. Innym celem jest umożliwienie śledzenia buforów mapowanych przez NVM przez istniejące interfejsy API do monitorowania i zarządzania. Docelowe platformy systemu operacyjnego / procesora obejmują Linux / x64 i Linux / AArch64.
  • Wyrażenia przełączające upraszczają kodowanie, rozszerzając je,  switchdzięki czemu można ich używać jako instrukcji lub wyrażenia. Oczekuje się, że wyrażenia przełączające będą stałą funkcją w JDK 14, po wyświetleniu ich podglądu zarówno w JDK 12, jak i JDK 13. Wyrażenia przełączające również przygotowują do użycia dopasowywania wzorców w programie switch. Dopasowanie wzorców pozwala programistom na warunkowe wyodrębnianie komponentów z obiektów w bardziej zwięzły i bezpieczny sposób. 
  • Alokacja pamięci uwzględniająca NUMA dla modułu odśmiecania pamięci G1, mająca na celu poprawę wydajności G1 na dużych maszynach. 
  • Usunięcie modułu odśmiecania Concurrent Mark Sweep (CMS), który wcześniej był przestarzały i przeznaczony do usunięcia. Powstali następcy CMS, w tym ZGC i Shenandoah. 
  • Przenoszenie ZGC na MacOS. Do tej pory był obsługiwany tylko w systemie Linux.
  • Usunięcie narzędzi pack200 i unpack200 oraz API Pack200 w java.util.jarpakiecie. Wszystkie zostały wycofane w Javie SE 11 z zamiarem usunięcia ich w przyszłości. Pack200 to schemat kompresji plików JAR.
  • Rekordy, które zapewniłyby zwartą składnię do deklarowania klas, które są przezroczystymi uchwytami dla płytko niezmiennych danych. Rekordy ułatwiają tworzenie klas, które są zasadniczo nośnikami danych, bez konieczności pisania wielu schematów. We wniosku stwierdza się, że deklarowanie płytko niezmiennych, dobrze wychowanych nominalnych agregatów danych powinno być łatwe i zwięzłe.
  • Narzędzie do pakowania, w fazie rozwoju inkubatora, do pakowania samodzielnych aplikacji Java. Narzędzie byłoby oparte na JavaFX javapackager. Takie narzędzie zostało zawarte w Javie, ale zostało wycięte z JDK 11 w ramach usuwania JavaFX.
  • Rozszerz język o dopasowywanie wzorców dla instanceof operatora. Byłaby to funkcja podglądu w JDK 14. Dopasowanie wzorców pozwala na bardziej zwięzłe i bezpieczniejsze przedstawienie powszechnej logiki programu, głównie warunkowego wyodrębniania komponentów z obiektów. Kod może być krótki i bezpieczny dla typów.
  • Drugi podgląd bloków tekstowych, wielowierszowy literał ciągu, który pozwala uniknąć większości sekwencji specjalnych i automatycznie formatuje ciąg w przewidywalny sposób. Bloki tekstowe dałyby programiście kontrolę nad formatem w razie potrzeby, uprościłyby pisanie programów Java i poprawiłyby czytelność ciągów. Bloki tekstowe były przeglądane w JDK 13; iteracja JDK 14 dodałaby sekwencje specjalne do zarządzania jawnymi białymi znakami i kontrolą nowej linii.
  • Przestarzałe połączenie algorytmów równoległego oczyszczania i szeregowego usuwania elementów bezużytecznych. Opiekunowie Javy uważają, że ta kombinacja jest używana bardzo rzadko, ale wymaga wielu czynności konserwacyjnych.
  • Przenoszenie ZGC (Z Garbage Collector) do Windows. Ta funkcja ponownie została przeniesiona na oficjalną listę docelową po przywróceniu listy proponowanych do kierowania.
  • Interfejs API dostępu do pamięci obcej wraz z wprowadzeniem interfejsu API dla programów w języku Java w celu bezpiecznego i wydajnego dostępu do pamięci obcej poza stertą języka Java. Ten interfejs API powinien służyć jako alternatywa dla głównych dróg, za pomocą których programy Java uzyskują dostęp do pamięci, w tym nio.ByteBufferi sun.misc.Unsafe. Nowy interfejs API powinien mieć możliwość działania na różnych rodzajach pamięci, w tym pamięci natywnej, trwałej i sterowanej stercie. API nie powinno mieć możliwości podważania bezpieczeństwa JVM. Cofnięcie alokacji pamięci powinno być jawne w kodzie źródłowym. Oczekuje się, że API pomoże w opracowaniu natywnej obsługi interoperacyjności, co jest celem Projektu Panama.
  • Wycofanie portów Solaris / Sparc, Solaris / x64 i Linux / Sparc z zamiarem usunięcia ich w przyszłej wersji. Porzucenie obsługi tych portów umożliwi autorom OpenJDK przyspieszenie rozwoju nowych funkcji. Chociaż Solaris i Sparc były kluczowymi technologiami w Sun Microsystems, oryginalnym twórcy Javy, w ostatnich latach zostały wyparte w przestrzeni technologicznej przez system operacyjny Linux i procesory Intela.

Skąd pobrać JDK 14

Możesz pobrać oprogramowanie JDK 14 typu open source ze strony jdk.java.net dla systemów Linux, Windows i macOS. Możesz pobrać oprogramowanie Oracle Commercial Java SE 14 do pobrania z witryny Oracle.com.