Java 9 je ovdje: Sve što trebate znati

Java 9 - formalno, Java Platform Standard Edition verzija 9 - napokon je stigla, a njezin Java Development Kit (JDK) dostupan je programerima za preuzimanje.

Ima nekoliko važnih, ali kontroverznih novih značajki, ali ujedno je i posljednja u retku za stari stil isporuke Jave.

Gdje preuzeti Java 9 JDK

Oracle je objavio Java SE 9 JDK i dokumentaciju za preuzimanje od strane programera.

Ključne nove značajke u Javi 9

Debitirajući gotovo tri godine nakon Jave SE 8, Java SE 9 ima nekoliko ključnih arhitektonskih promjena, kao i mnoštvo poboljšanja.

Modularnost Java 9 promijenila je igru

Nove, kontroverzne mogućnosti modularnosti, temeljene na Project Jigsawu, zasigurno će pobuditi zanimanje vrhunskih Java trgovina koje žele vidjeti što JDK 9 sada nudi, čak i ako konzervativnije trgovine odluče pričekati da modularnost sazrije.

Modularnost - u obliku Java Platform Module System - dijeli JDK u skup modula za kombiniranje u vremenu izvođenja, sastavljanja ili izrade. Modularnost je nazvana „prijelaznom“ promjenom, što omogućuje razumijevanje ovisnosti među modulima.

Modularnost Java 9 trebala bi omogućiti programerima da lakše okupljaju i održavaju sofisticirane programe. Također, Java bi trebao omogućiti bolju mogućnost smanjenja na manje uređaje dok se poboljšavaju sigurnost i performanse.

Aspekti modularnosti Java 9 uključuju pakiranje aplikacija, modularizaciju samog JDK i reorganizaciju izvornog koda u module. Sustav gradnje je poboljšan za kompajliranje modula i nametanje granica modula u vrijeme gradnje. JDK i Java Runtime Environment (JRE) slike su restrukturirane tako da obrađuju module. Također, JavaFX UI kontrole i CSS API-ji sada su dostupni zbog modularnosti.

Podržani su mnoštvo konfiguracija; kao rezultat toga, skalabilnost, sigurnost i performanse aplikacija trebaju se poboljšati. Jednostavnije skaliranje Jave na male uređaje ključni je pokretač modularnih napora.

Zahvaljujući modularnosti, programeri će moći bolje konstruirati i održavati knjižnice i velike programe za Java SE (Standard Edition) i Java EE (Enterprise Edition). No tijekom razvoja Jave 9 Oracle, IBM, Red Hat i drugi imali su velika neslaganja oko toga kako točno napraviti tako radikalnu promjenu na platformi. Sam sustav modula odbijen je u svibnju, da bi nakon drugog napretka bio odobren na drugom glasanju u lipnju.

Čak i uz dogovor između glavnih dobavljača Jave, i dalje postoji kontroverza oko toga hoće li modularnost programerima Java učiniti mnogo dobrog, pri čemu neki stručnjaci kažu da, a drugi ne. Bez obzira na to, Java 9 je sada modularizirana.

Da bi olakšala migraciju na modulariziranu Javu 9, Java 9 omogućuje ilegalni reflektirajući pristup kodu na putu klase, koji JRE koristi za traženje klasa i datoteka resursa. Ova mogućnost neće biti dopuštena nakon Jave 9.

Poboljšanja kompajlera za Java 9 kôd

Nadogradnja Java 9 sadrži nekoliko novih mogućnosti za kompajliranje koda, a glavna je među njima kompilacija ispred vremena (AoT). Još je u eksperimentalnoj fazi, ova sposobnost omogućuje kompilaciju Java klasa u izvorni kôd prije pokretanja u virtualnom stroju. Ova je značajka namijenjena poboljšanju vremena pokretanja i malih i velikih aplikacija, s ograničenim utjecajem na vrhunske performanse.

Just-in-time (JIT) kompajleri su brzi, ali Java programi postali su toliko veliki da treba puno vremena da se JIT potpuno zagrije, što ostavlja neke Java metode nekompiliranim i slabljenjem performansi. Ahead-of-time kompilacija namijenjena je rješavanju ovih problema.

No, Dmitrij Leskov, direktor marketinga u dobavljaču Java tehnologije Excelsior, brine se da tehnologija prikupljanja unaprijed nije dovoljno zrela i želi da je Oracle pričekao jaču verziju do Jave 10.

Java 9 također nudi drugu fazu Oraclove pametne implementacije kompilacije. Ova značajka uključuje poboljšanje  s javac stabilnosti i prenosivosti alata, tako da se prema zadanim postavkama može koristiti u JVM (Java virtualnom stroju). Alat će se također generalizirati kako bi se mogao koristiti za velike projekte izvan JDK-a. JDK 9 je također ažurirao  javac kompajler tako da može kompajlirati programe Java 9 za pokretanje na nekim starijim verzijama Jave.

Još jedna nova, ali eksperimentalna značajka kompilacije je sučelje JVM kompajlera na razini Jave (JVMCI). Ovo sučelje omogućuje kompajleru napisanom na Javi da ga JVM koristi kao dinamički kompajler. JVMCI-jev API pruža mehanizme za pristup VM strukturama, instaliranje prevedenog koda i uključivanje u JVM sustav kompilacije.

Pisanje JVM kompajlera na Javi trebalo bi omogućiti visokokvalitetni kompajler koji je lakše održavati i poboljšati od postojećih kompajlera napisanih na C ili C ++. Kao rezultat toga, kompajleri napisani na samoj Javi trebali bi biti lakši za održavanje i poboljšanje. Ostali postojeći napori na omogućavanju kompajlera u Javi uključuju projekt Graal i Project Metropolis.

Nova mogućnost kontrole kompajlera namijenjena je pružanju precizne kontrole i o kontekstu metode ovisne kontrole JVM kompajlera, omogućavajući programerima da mijenjaju mogućnosti kontrole kompajlera u vrijeme izvođenja bez pogoršanja performansi. Alat također omogućava zaobilaženje pogrešaka JVM kompajlera.

REPL napokon dolazi na Javu 9

Java 9 sadrži alat za čitanje-ispis-ispis (REPL) - još jedan dugoročni cilj za Javu koji se ostvaruje u ovoj verziji, nakon godina razvoja u projektu Kulia.

Nazvan jShell, Java 9 REPL interaktivno procjenjuje deklarativne izjave i izraze. Programeri mogu dobiti povratne informacije o programima prije kompilacije samo unošenjem nekoliko redaka koda.

Mogućnosti alata za naredbene retke uključuju dovršavanje kartica i automatski dodavanje potrebnih zareza na terminalu. API jShell omogućuje funkciju jShell u IDE-ima i drugim alatima, iako sam alat nije IDE.

Nedostatak REPL-a naveden je kao razlog da se škole odmaknu od Jave. (Jezici kao što su Python i Scala već dugo imaju REPL.) No, osnivač Scala jezika Martin Odersky dovodi u pitanje korisnost REPL-a u Javi, rekavši da je Java orijentirana na izjave, dok su REPL-ovi orijentirani na izraze.

Poboljšanja Streams API-ja u Javi 9

Potoci u Javi omogućavaju programerima da izračune izračune kako bi se paralelizam podataka mogao učinkovito iskoristiti. Mogućnost protoka u Javi 8 služi za deklarativnu obradu podataka uz korištenje višejezgrenih arhitektura.

U Javi 9, Streams API dodaje metode za uvjetno preuzimanje i ispuštanje stavki iz Streama, prevlačenje preko Stream elemenata i stvaranje streama od vrijednosti koja se može poništiti, istovremeno proširujući skup Java SE API-ja koji mogu poslužiti kao izvori Streamova.

Predmemorija koda može se podijeliti u Javi 9

JDK 9 omogućuje dijeljenje predmemorije koda na segmente radi poboljšanja izvedbe i dopušta proširenja kao što je fino zrnasto zaključavanje. Rezultate bi trebalo poboljšati vrijeme čišćenja zbog specijaliziranih iteratora koji preskaču kôd nemetode; razdvajanje nemetodnog, profiliranog i neprofiliranog koda; i poboljšanje vremena izvršenja nekih mjerila. 

Bolja podrška za JavaScript u Javi 9 putem Project Nashorn

Projekt Nashorn, koji pruža lagano JavaScript vrijeme izvođenja za Javu, poboljšava se u JDK 9. Projekt Nashorn bio je pokušaj implementacije vrlo izvedbenog, ali laganog JavaScript izvođenja u Javi, slijedeći projekt Rhino započet u Netscapeu. Projekt Nashorn optužen je za omogućavanje ugradnje JavaScripta u Java programe. Javi je pružio JavaScript mehanizam u JDK 8.

JDK 9 uključuje API za raščlanjivanje za Nashornovo stablo sintakse ECMAScript. API omogućuje analizu ECMAScript koda pomoću IDE-a i okvira na strani poslužitelja bez ovisno o internim klasama implementacije Project Nashorna.

HTTP / 2 klijentski API dolazi na Javu 9

Beta HTTP / 2 klijentski API došao je do JDK 9, implementirajući u Javi nadogradnju na osnovni web protokol HTTP. WebSocket podržava i API.

HTTP / 2 API može zamijeniti HttpURLConnection API, koji je imao problema, uključujući dizajn s protokolima koji već nisu u funkciji, predikciju HTTP / 1, previše apstraktnost i teško korištenje.

Poboljšana podrška za HTML5 i Unicode u Javi 9

U JDK 9, Javadoc alat za dokumentaciju je poboljšan za generiranje HTML5 oznaka. Podržan je i standard kodiranja Unicode 8.0 - koji dodaje 8000 znakova, 10 blokova i šest skripti.

DTLS sigurnosni API dodan je Javi 9

Iz sigurnosnih razloga Java 9 dodaje API za DTLS (Datagram Transport Layer Security). Protokol je osmišljen kako bi se spriječilo prisluškivanje, neovlašteno miješanje i krivotvorenje poruka u komunikaciji klijent / poslužitelj. Predviđena je implementacija i za klijentski i za poslužiteljski način.

Ono što Java 9 odbacuje i uklanja

Java 9 odbacuje ili uklanja nekoliko značajki koje više nisu u modi. Glavni među njima je Applet API, koji je zastario. Izašlo je iz mode sada kada proizvođači preglednika koji vode računa o sigurnosti uklanjaju podršku za dodatke za preglednik Java. Pojava HTML5 također je pomogla da se dogodi njihova smrt. Razvojni programeri sada su upućeni na alternative poput Java Web Start-a, za pokretanje aplikacija iz preglednika ili programe koji se mogu instalirati. 

Alat za pregled aplikacija također je zastario.

Java 9 također odbacuje Concurrent Mark Sweep (CMS) sakupljač smeća, uz podršku koja će prestati u budućem izdanju. Namjera je ubrzati razvoj ostalih sakupljača smeća u virtualnom stroju HotSpot. Sakupljač smeća G1 u maloj stanci zamišljen je kao dugoročna zamjena za CMS.

U međuvremenu, kombinacije odvoza smeća koje su prethodno zastarjele u JDK 8 uklanjaju se u JDK 9. Uključuju rijetko korištene kombinacije poput Incremental CMS, ParNew + SerialOld i DefNew + CMS, što je dodalo dodatnu složenost osnovi koda sakupljača smeća.

Java 9 također uklanja Java upozorenja u izjavama o uvozu, kako bi se velike baze koda očistile od upozorenja. S ovim bazama koda, zastarjela funkcionalnost često mora biti podržana neko vrijeme, ali uvoz zastarjelog konstrukta ne opravdava poruku upozorenja ako je uporaba konstrukcije namjerna i suzbijena.

Također je u Javi 9 uklonjena mogućnost odabira JRE-a u vrijeme pokretanja putem značajke Multiple JRE (mJRE). Sposobnost se rijetko koristila, komplicirala je provedbu pokretača Java i nikada nije bila potpuno dokumentirana kada je debitirao u JDK 5.

Oracle je uklonio agenta JVM TI (Tool Interface) hprof (Profiliranje hrpe), koji je zamijenjen u JVM-u. Uklonjen je i jhat alat koji je zastario od strane superiornih vizualizatora hrpe i analizatora.

Java 9 je kraj svoje linije kada započinje nova linija Java 9

Mogli biste reći da Java 9 izlazi s velikim udarom, sa svim novim mogućnostima. Oracle je nedavno otkrio da je Java 9 posljednja te vrste, u smislu svoje oznake i vremena proteklog između glavnih izdanja.

Odsad nadalje, Java planira imati šestomjesečni ritam izdanja, sa sljedećom glavnom verzijom, koja će se zvati Java 18.3, do ožujka 2018., a slijedi Java 18.9 šest mjeseci kasnije.

Javin novi ritam izdanja također znači da JDK 9 neće biti označen kao izdanje za dugoročnu podršku. Umjesto toga, sljedeće dugoročno izdanje bit će Java 18.9.

Java kadenca bržeg izdanja znači da programeri neće morati čekati toliko dugo na glavna izdanja. To također može značiti da će programeri preskočiti Javu 9 i njene "nezrele" značajke modularnosti i čekati šest mjeseci na novu verziju, koja bi vjerojatno ispeglala bilo koju kinks, rekao je Simon Maple, direktor zagovaranja Jave u dobavljaču alata ZeroTurnaround.