Java cieszy się wielką popularnością, dlatego albo pomimo tego, że została wprowadzona 23 lata temu. Jednym z istotnych powodów, dla których jest tak popularna, jest jej niezależność od platformy. Oznacza to, że Java może działać na dowolnym systemie operacyjnym lub komputerze.
Wiele największych aplikacji i systemów do tworzenia stron internetowych na całym świecie jest tworzonych przy użyciu tego języka. Google, Amazon, Atlassian, Twitter, eBay czy Netflix to tylko niektóre z popularnych firm korzystających z Javy. Dzięki sześciomiesięcznemu harmonogramowi wydawania nowych wersji Javy, społeczność deweloperów może oczekiwać nowych i lepszych funkcji dla programistów w przyspieszonym tempie.
Minęło już trochę czasu, odkąd Oracle wprowadził przyspieszoną sześciomiesięczną kadencję wydawniczą i coraz trudniej jest nadążyć za każdą wersją i funkcjami, które dodają do tabeli. Z drugiej strony, ta szybkość udostępniania oznacza również, że Java wprowadza wiele nowych funkcji, z których możemy skorzystać. Oznacza to, że musimy cały czas zwracać uwagę na to, jakie ekscytujące możliwości są dodawane. Warto więc zobaczyć jakie są nowe funkcje Java 12.
Ta eksperymentalna funkcja chce dodać nowy algorytm odśmiecania pamięci o nazwie Shenandoah, stworzony dla aplikacji, które preferują szybkość reakcji i przewidywalne krótkie przerwy. Ta funkcja wprowadza algorytm, który jest wystarczająco wydajny, aby umożliwić uruchamianie programów w dostępnej pamięci, ale także zoptymalizowany, aby nigdy nie przerywać uruchomionego programu przez więcej niż kilka milisekund. Algorytm Shenandoah pomoże skrócić czas przerwy w odśmiecaniu pamięci, wykonując jednocześnie pracę ewakuacyjną z uruchomionymi wątkami Java. Wymienia on współbieżne cykle procesora i miejsce na ulepszenia czasu pauzy, dzięki czemu mamy taki sam czas pauzy, jak w zależności od wielkości danych.
Switch Expressions ma na celu rozszerzenie instrukcji switch. Wielodrożna instrukcja rozgałęzienia, która zapewnia łatwy sposób wysyłania wykonania do różnych części wewnątrz kodu, w oparciu o wartość wyrażenia. To rozszerzenie, obecnie w trybie podglądu, pozwala nam użyć przełącznika jako instrukcji lub wyrażenia, aby uprościć kodowanie i przygotować się na kolejne nadchodzące aktualizację.
Java 12 zawiera dwie aktualizacje domyślnego garbage collectora, G1. Pierwszy z nich, pomaga w usuwaniu mieszanych kolekcji G1, jeśli mogą przekroczyć cel pauzy. Jest to zmiana, która ma na celu uczynienie kolektora G1 lepszym w osiągnięciu określonego celu opóźnienia. Obecnie G1 używa silnika analizy do wybrania ilości pracy do wykonania podczas kolekcji, a gdy zestaw kolekcji został określony i kolekcja została rozpoczęta, G1 musi zebrać wszystkie obiekty na żywo we wszystkich regionach zestawu kolekcji bez zatrzymywania . Prowadzi to do tego, że garbage collector przekracza cel czasu pauzy, który ta aktualizacja ma rozwiązać.
Druga funkcja G1 skupia się również na poprawie wydajności garbage collectora, w szczególności zwracając nieużywaną pamięć. Aktualna wersja G1 zwraca pamięć tylko ze sterty Javy czy podczas cyklu równoczesnego. W tym miejscu pojawia się „Szybko zwróć nieużywaną pamięć zaangażowaną z G1”, koncentrując się na ulepszeniu modułu czyszczenia pamięci, automatycznie zwracając pamięć sterty Java do systemu operacyjnego, gdy G1 jest bezczynny.
Java Microbenchmarking Harness (JMH) zapewnia bogate ramy do tworzenia testów wydajności dla aplikacji Java. Pomaga on ludziom uniknąć wielu prostych błędów, które popełniają, próbując analizować wydajność aplikacji: rozgrzewka, unikanie eliminacji kodu, które nie wystąpią w produkcji itp. Każdy, kto jest zainteresowany pracą nad samą Javą i modyfikowaniem kodu, może to wykorzystać do porównania wydajności, zarówno przed, jak i po ich zmianach, ale także aby zobaczyć, jak wydajność porównuje się z wydaniami. Dostępny jest szereg testów porównawczych, aby umożliwić testowanie; projektowanie JMH jest takie, że można w prosty sposób dodawać nowe.
Wprowadzenie API do modelowania nominalnych opisów kluczowych artefaktów klas i plików wykonawczych. To API będzie przydatne dla narzędzi manipulujących klasami i metodami Java.
OpenJDK ma dwa porty dla architektury Arm 64, jeden dostarczony przez Oracle, a drugi od Red Hat. Ponieważ było to niepotrzebne i Oracle przestał wspierać Arm dla swoich plików binarnych JDK, podjęto decyzję o użyciu tylko portu Red Hat, który jest nadal utrzymywany i rozwijany.
Współdzielenie danych klasowych (CDS) było kiedyś komercyjną funkcją w Oracle. Wraz z ostatnim ruchem, zakończonym w Java 11, aby wyeliminować wszystkie różnice funkcjonalne między Oracle JDK i OpenJDK, jest to teraz zawarte w OpenJDK. Aby korzystać z CDS, wymagane jest archiwum, które zostało wygenerowane dla klas, które są ładowane podczas uruchamiania aplikacji.
Dzięki ciągłym aktualizacjom widzimy coraz więcej funkcji wprowadzanych do języka – ale co czują deweloperzy na temat tej ostatniej zmiany? Uaktualnienie i wdrożenie nowych funkcji językowych w dużych systemach i przedsiębiorstwach nie zawsze jest łatwe, nie wspominając o tworzeniu zgodności ze starszym kodem i lokalnymi sztuczkami dokonywanymi przez zespół.
I rzeczywiście, kiedy przyjrzymy się na najnowsze wersje Java, widzimy, że częste wydania nie oznaczają, że najnowsza wersja jest najpopularniejsza. Chociaż wielu programistów może nadal korzystać z Java 8, najnowsza wersja tego języka obiecuje kilka znaczących ulepszeń i jest dostępna do pobrania z Oracle. Chociaż Java 8 jest już stara to popularność jej jest niezaprzeczalna. W większych projektach może być szkoda czasu na migrację, a w dodatku w stosunku do Javy 11 w nowej wersji nie ma wcale dużo nowości. Być może jeżeli macie duże problemy z przerwami w odśmiecaniu pamięci i używacie G1, to warto zobaczyć czy Java 12 w jakikolwiek sposób Wam pomaga.
Repozytoria rozwoju dla Java 13 są teraz otwarte, a już we wrześniu powinna pojawić się nowa wersja. W skrócie nowymi rzeczami w niej to:
Nie jest tajemnicą, że Java uczyniła nasze życie online wygodniejszym. Pisanie kodu w Javie nigdy nie było łatwiejsze i tworzenie programów, które są bezpieczne i niezawodne.
JDK 12 zapewnia niewielką liczbę nowych funkcji i interfejsów API, a wyrażenie switch jest najbardziej interesujące dla programistów. Użytkownicy G1 bez wątpienia docenią poprawę wydajności. Wraz z nową wersją wydania radzimy wszystkim użytkownikom przetestować swoje aplikacje w tej wersji. Nadążanie za stopniowymi zmianami pozwoli uniknąć niespodzianek, jeśli zdecydujesz się przejść do kolejnego wydania wsparcia długoterminowego.