java 11

Co nowego w Java 11 ?

W zeszłym tygodniu (25.09.2018) ukazała się nowa wersja Javy. Przyniosła ona kilka ciekawych nowości. O ile zmian w samym języku jest niewiele, to cała platforma uzyskała cały szereg małych usprawnień, które mogą okazać się bardzo przydatne.

Java 11 – lista nowości

Rozszerzone API

Kilka klas zostało wzbogacone o nowe metody. Nie pojawiły się jakieś wielkie zmiany, ale dodano parę usprawnień.

Klasa String otrzymała takie metody jak np. isBlank(), która zwraca true w przypadku, gdy string zawiera tylko białe znaki (takie rozwiązanie można było znaleźć wcześniej w bibliotece apache-commons w klasie StringUtils).

Dołączono metodę lines(), która dzieli string na poszczególne linie i zwraca stream. Nową wersję uzupełniono także o metody usuwające białe znaki: strip(), stripLeading(), stripTrailing() oraz metodę repeat(n), która powiela dany string n razy.

Klasa Files zyskała metody: writeString(), która zapisuje tekst do pliku z wybranym kodowaniem (domyślnie jest to UTF-8), readString() – odczytuje całą zawartość z pliku,isSameFile()  – sprawdza czy dane pliki są takie same.

Predicate not(Predicate<? super T> target), która zwraca zaprzeczenie wyniku predykatu podanego jako parametr.

Natomiast klasa Optional zyskała metodę isEmpty().

Słowo kluczowe var w wyrażeniach lambda

W Javie 10 zostało dodano słowo kluczowe var i wnioskowanie typów dla zmiennych lokalnych.
Java 11 rozszerza tę funkcjonalność o możliwość korzystania ze słowa kluczowego var w wyrażeniach lambda, co będzie skutkowało tym, że taki zapis:

będzie równoznaczny takiemu:

pozwoli to na dodawanie adnotacji do parametrów bez utraty zwięzłości kodu

http://openjdk.java.net/jeps/323

Natywny klient http

Java 11 otrzymała nowego klienta http ze wsparciem dla HTTP/2 i asynchronicznego wykonywania zapytań.

Przykładowa implementacja klienta http w Javie 11:

http://openjdk.java.net/jeps/321

Nowe Garbage Collector’y – Epsilon: A No-Op Garbage Collector i ZGC

W Javie 11 dodano dwa nowe garbage collector’y. Epsilon, który nie wykonuje żadnych operacji sprzątania pamięci. Dzięki temu nie mamy żadnych opóźnień w związku z GC, a w sytuacji, gdy kończy się pamięć, aplikacja zostaje zatrzymana. Takiego GC można używać w aplikacjach, gdzie kluczowe są niskie opóźnienia (latency) i koszt uruchomienia nowej instancji nie jest istotny.

http://openjdk.java.net/jeps/318

Natomiast drugi ZGC to eksperymentalny GC, który ma powodować bardzo małe pauzy nie przekraczające 10ms. Na razie jest on dostępny tylko na 64-bitowych linux’ach.

http://openjdk.java.net/jeps/333

Flight Recorder – framework do zbierania danych o aplikacji

Narzędzie, które wcześniej było częścią Oracle jdk stało się open source’owe i włączone do Javy 11. Zapewnia ono zbieranie informacji podczas działania aplikacji, dając przy tym bardzo niewielki narzut wydajnościowy.

http://openjdk.java.net/jeps/328

Heap Profiling

Kolejnym narzędziem pomagającym badać wydajność naszej aplikacji jest wysoko wydajny profiler, który będzie dostępny przez api JVMTI.

http://openjdk.java.net/jeps/331

Uruchamianie programu jedną komendą

Kolejną nowością jest możliwość odpalenia pliku źródłowego wraz z kompilacją jedną komendą.

Do tej pory, żeby uruchomić program napisany w Javie potrzebne były dwie komendy:

w Javie 11 wystarczy tylko jedna:

http://openjdk.java.net/jeps/330

Dynamiczna pula stałych

Format pliku .class rozszerzono, tak by mógł wspierać nową pulę stałych. Ma to działać podobnie jak invokedynamic (wprowadzone w Javie 7), a tworzenie tej puli ma być delegowane do tzw. „bootstrap method”.

http://openjdk.java.net/jeps/309

Usunięcie modułów Java EE i CORBA

Moduły te oznaczono jako Deprecated w Javie 9 i obecnie zostały usunięte. Poza tym została też usunięta JavaFx, która będzie rozwijana jako osobny projekt.

http://openjdk.java.net/jeps/320

Zmiana sposobu wydawania Jdk i support dla wersji LTS

Najgłośniejszą zmianą związaną z Java 11 jest zmiana licencjonowania Javy wydawanej przez Oracle.

Oracle zrezygnowało z wydawania swojego jdk dla wszystkich. Będzie można go używać jedynie do celów niekomercyjnych, a komercyjne jdk nie będzie już dostępne publicznie (zdaje się to trochę dziwne, ale niestety tak jest). Prawdopodobnie w przyszłości Oracle w ogóle zrezygnuje z publicznego wydawania swojego jdk.

Java 11 to pierwsza wersja LTS (od czasu zmiany sposobu wydawania Javy), ale jest to  wsparcie jedynie dla komercyjnej Javy wydawanej przez Oracle. Publiczny support OpenJdk będzie trwał tylko przez 6 miesięcy do wydania Javy 12. Tak naprawdę, jeśli chcesz korzystać z niekomercyjnej Javy, musisz aktualizować jej wersję co pół roku lub płacić za aktualizacje Oracle. Odnośnie licencji i wsparcia, a także jak radzić sobie z nową rzeczywistością możecie poczytać tutaj i tutaj.

Podsumowanie

Większości zmian, które przynosi nowa wersja Javy jest korzystna, jednak przyćmiewa je sytuacja związana z licencjami, i co ważniejsze chaos informacyjny jaki dało się zauważyć w związku z tym. Oracle mogło zakomunikować to w trochę bardziej przejrzysty sposób. Według mnie efekt tego zamieszania był łatwy do przewidzenia. Większość firm przesiada się na OpenJdk i będzie próbować radzić sobie z aktualizacjami do nowych wersji Javy lub skorzysta z alternatywnych rozwiązań takich jako AdoptOpenJDK (które będzie dogrywać poprawki bezpieczeństwa do starszych wersji Javy).

Źródła:

http://openjdk.java.net/projects/jdk/11/

Leave a Reply

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *