Java 9 modulesystem

1

Cześć czytałem ostatnio o tym że w javie 9 ma być możliwość uruchomienie programu bez zainstalowanego JRE na komputerze użytkownika . Czy ktoś bardziej w temacie mógłby mi przybliżyć jak to wygląda w praktyce . Jakie są plusy , jakie minusy ?

3

Prawdopodobnie chodziło o dorzucanie JRE do samej aplikacji. Dzięki modularnemu JRE w Javie 9 możesz go mocno poobcinać wedle własnych potrzeb.

Poza tym jest jeszcze coś takiego jak: JEP 295: Ahead-of-Time Compilation wprowadzone w Javie 9, gdzie kompilujesz bajtkod Javowy wprost do natywnej binarki. Ma jednak pewne ograniczenia, np:

AOT initial release in JDK 9 is provided for experimental-only use and is restricted to Linux x64 systems running 64-bit Java with either Parallel or G1 GC.

0

Dziękuje za odpowiedz . Rozumiem że będzie to pewnego rodzaju rewolucja . Jak to interpretować ?

2

Pożyjemy, zobaczymy. Ekosystem Javy jest na tyle duży, że na dynamiczne zmiany nie ma co liczyć. Biblioteki będą stopniowo przenosić się do świata modułowego oferując przez długi czas wsteczną kompatybilność.

Trzeba też wziąć pod uwagę, że na modułowość Javy 9 składają się dwie rzeczy:

  • modułowość samej Javy o czym już wspomniałem - to pozwala na obcinanie JRE dołączanego do aplikacji, ale także na przyspieszanie uruchamiania JVMa (bo skoro nasza aplikacja korzysta tylko z części modułów Javy to resztę można w ogóle wyłączyć)
  • modułowość aplikacji - tutaj mamy mechanizm zależności modułów oraz wystawiania ich interfejsów. Są to narzędzia do segregowania API oraz weryfikacji kompletności zestawu bibliotek.

Największy zysk moim zdaniem będzie z lepszej kontroli widoczności klas. Skoro w module-info.java można wpisać tylko część paczek jako widocznych dla użytkowników biblioteki, to w innych paczkach można mieć publiczne klasy bez ryzyka używania ich wprost przez użytkowników biblioteki. Wymusi to mniejsze sprzężenie między biblioteką, a aplikacją, a co za tym idzie ułatwi migrację na nowsze wersje biblioteki.

0

Dokładnie, np. mamy coś takiego:
http://google.github.io/guava/releases/7.0/api/docs/com/google/common/base/internal/Finalizer.html
dzięki modularyzacji taka klasa może być widoczna wewnątrz jarka a nie na zewnątrz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1