Java 15 – Co nowego w kolejnym wydaniu?

blog.mloza.pl 4 lat temu

Kolejna wersja Javy to już druga wydana w tym roku. Java 14 ukazała się w marcu. O tym co pojawiło się w niej nowego, możecie przeczytać w poście: Java 14 – Co nowego w kolejnym wydaniu?. Pół roku później mamy już wydanie oznaczone numerem 15. Ta wersja nie przynosi już tylu nowości co poprzednie (przynajmniej takich, które zauważymy w codziennej pracy). Zobaczmy, co możemy znaleźć w tym wydaniu.

Text blocks

Bloki tekstu wchodzą jako finalna i permanentna funkcjonalność języka. Wersja preview pojawiła się w wydaniu 13, następnie po sugestiach i dodaniu nowych sekwencji ucieczki jako second preview w wersji 14. Więcej o tym możecie przeczytać w osobnym artykule na blogu: Text Blocks Java 13 – czyli bloki tekstu w kodzie oraz na oficjalnej stronie opisującej tę funkcjonalność: https://openjdk.java.net/jeps/378.

Records (Second Preview)

Nowy typ klasy do przechowywania niemutowalnego stanu. Pierwszy raz rekordy pojawiły się w Javie 14 jako preview. W tym wydaniu jest to second preview. Dzięki tej funkcjonalności możemy w bardzo zwięzły sposób zadeklarować klasę, do której zostaną automatycznie dodane: konstruktor, gettery, metody equals, hashCode i toString. Więcej możecie przeczytać w poście: Java 14 – Record classes oraz na oficjalnej stronie https://openjdk.java.net/jeps/384.

Hidden Classes

Klasy ukryte – z tej funkcjonalności języka skorzystają głównie frameworki. Klasy takie są generowane dynamicznie w czasie wykonania aplikacji i nie mogą być bezpośrednio linkowane z byte codem innych klas. Do takich klas nie będzie można uzyskać dostępu poprzez nazwę, ponieważ jest to nie tylko niepotrzebne, ale również szkodliwe. Klasy te będą agresywnie wyrzucane z pamięci. Dokumentacja jako przykład podaje wyrażenia lambda, gdzie zamiast klas jest generowany kod, który umie wygenerować klasę i stworzyć jej instancję. Innym przykładem są języki wyższego poziomu oparte na JVM, które zapewniają dodatkową funkcjonalność, używając dynamicznych Proxy. Więcej przeczytacie tutaj: https://openjdk.java.net/jeps/371.

Sealed Classes (Preview)

Klasy takie będą specyfikować, jakie klasy będą mogły po nich dziedziczyć. Działa to zarówno w klasach jak i interfejsach. Dzięki temu autor klasy będzie miał większą kontrolę, jaki kod będzie odpowiedzialny za implementację.

Przykładowo:

public abstract sealed class Shape permits Circle, Rectangle, Square {...}

Taka deklaracja klasy mówi, iż po klasie Shape może dziedziczyć tylko Circle, Rectangle i Square. Więcej przeczytacie tutaj: https://openjdk.java.net/jeps/360.

Pattern Matching for instanceof (Second Preview)

Jest to Second Preview funkcjonalności znanej z Javy 14. Od poprzedniej wersji kilka się zmieniło. Więcej o tej funkcjonalności możecie przeczytać w poście: Java 14 – Co nowego w kolejnym wydaniu? oraz na oficjalnej stronie: https://openjdk.java.net/jeps/375.

Foreign-Memory Access API (Second Incubation)

API pozwalające na dostęp do natywnej pamięci w sposób bezpieczny i przewidywalny. Wcześniej, aby dostać się do natywnej pamięci, trzeba było korzystać z klasy Unsafe, co jak sama nazwa mówi, może być niebezpieczne. Foreign-Memory Access API pojawiło się w Javie 14 jako Incubation, w nowej wersji jest oznaczone jako Second Incubation. Czyli zanim będziemy mogli używać tego produkcyjnie, minie jeszcze trochę czasu. Więcej na ten temat: https://openjdk.java.net/jeps/383.

ZGC wchodzi produkcyjnie

ZGC został po raz pierwszy opublikowany w Javie 11. W następnych wydaniach dodano wsparcie do wszystkich platform oraz dodawano nowe funkcjonalności. W Javie 15 w końcu wchodzi jako rozwiązanie produkcyjne. Nie zastępuje G1 jako domyślnego Garbage Colectora. Więcej możesz przeczytać tutaj: https://openjdk.java.net/jeps/377 oraz na wiki poświęconej temu GC: https://wiki.openjdk.java.net/display/zgc.

Schenandoah wchodzi produkcyjnie

Skoro przy temacie GC już jesteśmy, to kolejny również wchodzi produkcyjnie. Ten GC pojawił się po raz pierwszy w Javie 12. Jego celem jest zminimalizowanie czasu pauzy JVM. Więcej możecie przeczytać tutaj https://openjdk.java.net/jeps/379 lub na oficjalnej wiki poświęconej temu GC: https://wiki.openjdk.java.net/display/shenandoah/Main.

Edwards-Curve Digital Signature Algorithm (EdDSA)

Dodano nowy algorytm kryptograficzny. Więcej o tym przeczytacie tutaj: https://openjdk.java.net/jeps/339.

Usunięcie silnika JavaScript Nashorn

Silnik ten jest oznaczony jako deprecated od Javy 11. W tym wydaniu zostanie usunięty całkowicie. Więcej tutaj: https://openjdk.java.net/jeps/372.

Przepisanie DatagramSocket API

W 13 wersji Javy zostało zaimplementowane na nowo Socket API. W tej wersji zostało przepisane DatagramSocket API. Aktualne API sięga czasów Javy 1.0 i jest pomieszaniem starego kodu Javy oraz natywnego kodu w C. Jest to trudne w utrzymaniu i debugowaniu. Dodatkowo kod ten nie jest gotowy, aby współpracować z lekkimi wątkami, które są opracowywane w ramach Projektu Loom. Więcej na ten temat znajdziecie tutaj: https://openjdk.java.net/jeps/373.

Wyłączenie i oznaczenie jako przedawnionego Biased Locking

Biased locking jest to sposób synchronizacji wątków, który był bardzo pomocny w starszych wersjach Javy. W nowszych aplikacjach już nie poprawia tak bardzo wydajności, a jego utrzymanie jest bardzo drogie i trudne. Dlatego zdecydowano się pozbyć tego mechanizmu. Całość opisana jest tutaj: https://openjdk.java.net/jeps/374.

Usunięcie portów dla Solarisa i SPARCa

Usunięcie wsparcia dla tych architektur pozwoli na przyśpieszenie prac nad projektami takimi jak Valhalla, Loom czy Panama. Porty zostały oznaczone jako do usunięcia w Javie 14. Więcej: https://openjdk.java.net/jeps/381.

Oznaczenie mechanizmu RMI Activation jako deprecated

Mechanizm RMI Activation jest aktualnie niepotrzebny i zasadniczo nieużywany. Pozbycie się go pozwoli na zmniejszenie kosztów utrzymania i developmentu JVM. Więcej znajdziecie tutaj: https://openjdk.java.net/jeps/385.

Podsumowanie

Duża część z opisanych nowości to usunięcie kodu lub przesunięcie do kolejnej fazy developmentu. Większości z tych rzeczy raczej nie zauważymy w codziennej pracy. Na kolejną wersję poczekamy do Marca 2021.

Idź do oryginalnego materiału