W tym tekście przybliżę Wam jakich zmian dokonało Oracle w JDK 9 oraz w Java 9 API. Jeśli jesteś developerem na pewno zainteresuje Cię to, jakie nowości wprowadza nowe wydanie platofrmy od Oracle. Zapraszam do lektury.

Trochę o Javie i JVM

Java i JVM to dwie, całkiem różne od siebie rzeczy. Java to język, w którym programujemy, a JVM to zespół oprogramowania będącego maszyną wirtualną, czyli swoistą warstwą pośredniczącą między nami, a tzw. “bare hardware”. To dzięki takiej strukturze programista JVM(nie, nie Javy) może w ogóle nie przejmować się sprawami czysto sprzętowymi takimi jak alokacja zmiennych w pamięci RAM,  pilnowanie zwalniania jej, pilnowanie zużycia CPU czy GPU czy inne.

Główne wady środowiska

Od zawsze zarzucano Javie(tak na prawdę to JVM), że jest bardzo zasobożerna. W rzeczywistości chodziło wyłącznie o zużycie RAMu, gdyż nigdy JVM nie zużywało specjalnie mocy obliczeniowej CPU. Działo się tak, gdyż programiści nigdy nie starali się tej pamięci oszczędzać, Garbage Collector nie działał do końca sprawnie, a  do tego JVM ma “tendencję” do alokowania większej ilość pamięci niż potrzeba. Dodatkowo Java zawsze potrafiła trochę “mulić”. A prawda jest inna. Java jest “wolniejsza”, jeśli chodzi o czas wykonywania względem języków jak C, C++ czy Rust, jednak nie jest to taka różnica by człowiek ją mógł zauważyć w formie lagów.

Zatem jakie te zmiany?

 

Struktura i dostęp w Java 9

Przede wszystkim zmianie ulegnie struktura logiczna JDK, jeśli chodzi o strukturę plików. Stara struktura opierała się na 3 folderach: lib, bin, jre, a następnie jre miała w sobie jeszcze foldery lib i bin. Ten układ został uproszczony do struktury 3 folderów: bin, lib, conf. Oba te układy prezentuje grafika poniżej. Dodatkowo usunięto pliki: tools.jar oraz rt.jar.

Java 9 Struktura w JDK 8 i JDK 9

Inną zmianą jest wprowadzenie JShell. Jest to interfejs zgodny z REPL, czyli Read-Eval-Print-Loop, występujacy np. w Pythonie. Dzięki temu będziemy mogli przetestować jakieś API ręcznie poprzez JShell, wykonując komendy jak w normalnym CMD(CommandLine).

W Javie 9 zostanie zmieniony też system budowania archiwów .jar. Zostanie on zastąpiony systemem modularnym, podobnym do tego znanego z Maven(zasada zależności i repozytoriów).

W strukturze JVM zmianie uległ jeszcze jeden istotny element: GarbageCollector. Zostanie on w domyśle ustawiony na G1, który znany jest od Javy 1.7, ale był tylko alternatywą, a nie tym używanym domyślnie w trakcie wykonywania kodu naszej aplikacji.

Zmiany w Java 9 API

Zmienione zostanie też dość znacznie Java API. Dodane zostaną ulepszenia do tego co istnieje, ale rownież zostaną niektóre paczki usunięte.

Rozszerzone zostanie API dotyczące “konkurencji”(ang. concurrency API). Chodzi tu przede wszystkim o “Reactive Streams API”, czyli API pomagające streamować dane tak, by nie powodować efektu “back-pressure”, ciśnienia, które odkłada się na procesorze i powoduje spadki wydajności. Poza tym ulepszone będzie wsparcie dla opóźnień i “timeoutów”, dziedziczenie w zakresie podklasowości oraz “kilka” metod. Obok tego jedną z najważniejszych zmian jest dodanie klasy StackWalker, która pozwoli nam szybko przemieszczać się wzdłuż “stack trace’u” naszej paczki.

List frames = StackWalker.getInstance().walk(s ->
s.dropWhile(f -> f.getClassName().startsWith("com.foo."))
.limit(10)
.collect(Collectors.toList()));

W Java 9 nie będzie potrzebne już dodawanie zewnętrznego API czy frameworka do operowania z protokołem HTTP przy wzorcu RESTful – przywitajmy się z HTTP 2.0

Kolejnym udogodnieniem jest dodanie “kopa” Process API Javy. Klasa Process oraz Runtime zapewniały do tej pory dość słabe wsparcie dla komunikacje z powłoką systemową. Od teraz będzie można np. pobrać PID jedną linijką kodu.

System.out.println("Your pid is " + Process.getCurrentPid());

Skoro powiedziane jest co zostanie dodane, to teraz czas powiedzieć co usunięte będzie.

Przede wszystkim usunięte zostało większość paczek sun.* z internalnego API Javy. Prócz tego nie znajdziemy jeszcze w Java 9 natywnego JSON API, ale to najmniejszy problem, gdyż tych jest bardzo wiele takich jak minimal json API czy Gson API od Google. Oracle nie zdecydowało się jeszcze na dodanie API służącego do przeliczania nominałów i walut w Javie, ale to też nie wydaje się być bardzo dużą stratą w dzisiejszych czasach.

Do tego wszystkiego trzeba jeszcze dodać zaostrzenie interpretacji słowa kluczowego public. Zmiany dotycząc przede wszystkim interpretacji żądania dostępu do klasy lub struktury danych czy też zmiennej oznaczonej tym słowem kluczowym przy użyciu mechanizmow refleksji.

Podsumowanie

Jak widać bardzo wyraźnie Oracle zapowiada bardzo dużo ciekawych feature’ów w najnowszym wydaniu Javy. Moim zdaniem wszystkie zmiany są bardzo pozytywne i zapowiadają się obiecująco, a co z tego wyjdzie to czas pokaże. W tekście postarałem się wymienić najważniejsze zmiany moim zdaniem, jednak tych zmian jest o wiele, wiele więcej. Wszystkie możecie znaleźć oczywiście w Release notes.

To by było na tyle w tym poście. Trzymajcie się!


Administrator

Nasza redakcja składa się z zapalonych pasjonatów gamingu i technologii. Każdy ma swoją niszę, dzięki czemu razem możemy zaproponować Wam szeroki przekrój eksperckich materiałów. Dzielimy się najświeższymi wiadomościami, recenzjami i poradami, aby nasi czytelnicy byli na bieżąco z tym, co najważniejsze w świecie techu i gier.

Udostępnij

WARTO PRZECZYTAĆ:

wiedźmin 3 Przecieki na temat dodatku do Wiedźmina 3 zyskują na sile
Kolejne doniesienia sugerują, że rzekome rozszerzenie do Wiedźmina 3 – kultowej gry CD Projekt Red nie zabierze graczy do Zerrikanii, lecz osadzi akcję w okolicach
roblox Bezpieczeństwo dzieci w Roblox “to wyzwanie”
Dr Elizabeth Milovidov przyznała w najnowszym wywiadzie, że ochrona najmłodszych przed nieodpowiednimi treściami w internecie to ciągła walka, w której odpowiedzialność ponoszą zarówno platformy technologiczne,
Night of the Dragon Premiera polskiego wydania Blood Ties już niedługo!
Dobre wieści dla fanów World of Warcraft, a w szczególności dla tych, którzy lubią fabułę i lore. Wydawnictwo Insignis zapowiedziało premierę polskiego wydania najnowszej książki
10Komentarze
  • Karol, 6 grudnia 2017 @ 16:07 Odpowiedz

    Dzięki za wpis. Zastanawiam się czy 1.9 Java będzie działać w Windows XP.

    • Userr, 24 grudnia 2017 @ 03:18 Odpowiedz

      Minęły już ponad 3 lata od porzucenia przez Microsoft systemu Windows XP. Java 8 nie posiadała już oficjalnego wsparcia dla tegoż systemu. Obecnie coraz więcej oprogramowania nie jest z nim kompatybilne (począwszy od gier, przez przeglądarki, a kończąc na programach zabezpieczających), więc nie byłoby to zaskoczeniem gdyby tak przełomowa wersja 9. nie byłaby kompatybilna z Windowsem XP czy Vista.

  • CeylonRedHat, 31 stycznia 2018 @ 17:29 Odpowiedz

    A czy mogę się uczyć Scala lub Kotlin nie znając w ogóle Javy? Jak na moje oko są jakieś prostsze do nauki, nie mają średników kod jest zwięzły i miły dla oka. Do tego Scala ma piękną składnie i Scala.js, nie musiał bym się babrać w okropnym Javascript!

  • Karol, 20 kwietnia 2020 @ 12:40 Odpowiedz

    Dzięki za wpis. Zastanawiam się czy 1.9 Java będzie działać w Windows XP.

    • Userr, 20 kwietnia 2020 @ 12:45 Odpowiedz

      Minęły już ponad 3 lata od porzucenia przez Microsoft systemu Windows XP. Java 8 nie posiadała już oficjalnego wsparcia dla tegoż systemu. Obecnie coraz więcej oprogramowania nie jest z nim kompatybilne (począwszy od gier, przez przeglądarki, a kończąc na programach zabezpieczających), więc nie byłoby to zaskoczeniem gdyby tak przełomowa wersja 9. nie byłaby kompatybilna z Windowsem XP czy Vista.

  • CeylonRedHat, 20 kwietnia 2020 @ 12:45 Odpowiedz

    A czy mogę się uczyć Scala lub Kotlin nie znając w ogóle Javy? Jak na moje oko są jakieś prostsze do nauki, nie mają średników kod jest zwięzły i miły dla oka. Do tego Scala ma piękną składnie i Scala.js, nie musiał bym się babrać w okropnym Javascript!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *