Maciej Olanicki
Maciej OlanickiRedakcja Bulldogjob

Java 18 już dostępna. Poznaj wszystkie nowości

Java 18 jest już dostępna. Przyglądamy się nowościom i zmianom.
22.03.20223 min
Java 18 już dostępna. Poznaj wszystkie nowości

Zaprezentowana została nowa wersja Javy oznaczona numerem 18. Odkąd JDK przeszło na nowy, szybszy harmonogram wydawniczy, nowości z wydania na wydanie pojawia się co prawda mniej, ale udało się zaimplementować dziewięć JDK Enhancement Proposals, z czego trzy są jeszcze w fazie wstępnego wdrożenia.

JEP 400 – domyślne kodowanie UTF-8

Odtąd developerzy mają możliwość stosowania UTF-8 jako domyślnego zestawu znaków dla standardowych API Javy. Rozwiązuje to problem występujący w sytuacji, kiedy brakowało informacji o określonym zestawie znaków podczas konwersji z bajtów na 16-bitowe wartości char. 

W takich sytuacjach odczytywanie i zapisywanie plików oraz przetwarzanie tekstu odbywało się zgodnie z zestawem znaków w środowisku uruchomieniowym. Jeśli kod był natomiast pisany w środowisku z innym domyślnym zestawem znaków, wówczas mogło dojść do „wykrzaczania się” znaków na wyjściu. Możliwość ustawienia UTF-8 jako domyślnego charsetu rozwiąże ten problem.

JEP 408 – lekki serwer webowy

W Javie 18 pojawiło się narzędzie CLI, pozwalające na szybkie postawienie niewielkiego, minimalistycznego serwera webowego, który będzie służył wyłącznie do wyświetlania statycznych treści. Wystarczy wprowadzić w konsoli polecenie jwebserver i za pomocą parametrów określić adresy: -b to IP, na którym serwer nasłuchuje, -p pozwala na zmianę portu, zaś z użyciem -d wskazuje się lokalizacje statycznych danych, które mają być wyświetlane. 

JEP 408 – tagi @snippet w Java API Documentation

Dotąd, aby dodać niewielki fragment kodu do generującego dokumentację JavaDoc, konieczne było używanie tagów <pre>. Odtąd wystarczy dodać tag @snippet przed fragmentem kodu, aby ten pojawił się w dokumentacji.

JEP 416 – reimplementacja Core Reflection API z użyciem MethodHandle

Kolejna zmiana zaszła w interfejsie refleksji Javy. Dotąd pozyskiwanie z java.lang.reflect informacji o polach, metodach i konstruktorach załadowanych klas odbywało się w oddzielnych mechanizmach. W tym JEP-ie dokonano ich reimplementacji nad uchwytami metod, co powinno przełożyć się na ułatwienia w utrzymaniu kodu. Warto zaznaczyć, że jest to zmiana wewnętrzna i nijak nie przekłada się na pracę z API.

JEP 418 – Internet-Address Resolution SPI

W nowej Javie otrzymuje także server-provider interface, który pozwala na ustawienie własnego resolvera domen dla nazw hostów czy adresów. Dotąd wykorzystywany był domyślny resolver systemu operacyjnego, na którym działa kod. To rodziło kilka problemów, np. trudności w nowocześniejszych protokołów, jak np. DNS-over-QUIC, dzięki czemu poleganie na systemowym resolverze nie zawsze było dobrym pomysłem. Odtąd można więc użyć innego.

JEP 421 – początek końca finalizacji

Służąca do zwalniania zasobów finalizacji w Javie zostanie w przyszłości usunięta. Na razie, w Javie 18, wciąż jest domyślnie włączona, ale dzięki JEP 421 można ją całkowicie wyłączyć opcją --finalization=disabled. Docelowo z Javy znikną wszystkie metody finalize(). Finalizacja jest JDK od wersji 1.0 i ma swoje problemy, takie jak nieznane opóźnienie (nie wiadomo, ile czasu upływa od momentu, kiedy obiekt jest nieosiągalny a momentem, kiedy wywołany jest jego finalizer) czy brak kontroli tego, na jakich wątkach działają finalizery. Aby uniknąć problemem, z wyciekanie zasobów, zdecydowano się więc finalizację z Javy usunąć.

Testowe nowości

Ponadto w Javie w wersji testowej zaimplementowaną rezultaty kolejnej fazy prac nad Vector API, Foreign Function & Memory API oraz mechanizmu dopasowania do wzorca dla instrukcji switch, co będzie stanowić dużą zmianę dla języka – więcej na ten temat można przeczytać na blogu Readme. Z pełną listą nowości można się zapoznać w oficjalnej dokumentacji dostępnej tutaj.

Jak widać, trudno uznać Javę 18 za wydanie ze spektakularną liczbę nowości – stanowi ona finalizację funkcji testowanych wcześniej. Jak już jednak wspomniano, po wdrożeniu nowego harmonogramy wydawniczego, zakładającego premierę nowej wersji co 6 miesięcy (wrzesień i marzec) oraz dwuletni interwał pomiędzy wydania o wydłużonym okresie wsparcia rozwój Javy stał się bardziej płynny. 

<p>Loading...</p>