Ohjelmointi

Java 9 on täällä: Kaikki mitä sinun tarvitsee tietää

Java 9 - muodollisesti Java Platform Standard Edition -versio 9 - on vihdoin täällä, ja sen Java Development Kit (JDK) on kehittäjien ladattavissa.

Siinä on useita tärkeitä kiistanalaisia ​​uusia ominaisuuksia, mutta se on myös viimeinen Java-toimitustyylin rivi.

Mistä ladata Java 9 JDK

Oracle on lähettänyt Java SE 9 JDK: n ja dokumentaation kehittäjien ladattavaksi.

Java 9: ​​n tärkeimmät uudet ominaisuudet

Java SE 9: ssä debyytti lähes kolme vuotta Java SE 8: n jälkeen ja siinä on useita keskeisiä arkkitehtuurimuutoksia sekä monia parannuksia.

Java 9: ​​n modulaarisuus on pelinvaihtaja

Projektin palapeliin perustuvat uudet, kiistanalaiset modulaarisuusominaisuudet herättävät varmasti kiinnostusta uusimpiin Java-myymälöihin, jotka haluavat nähdä, mitä JDK 9 tarjoaa nyt, vaikka konservatiivisemmat kaupat päättävät odottaa modulaarisuuden kypsymistä.

Modulaarisuus - Java Platform Module System -muodon muodossa - jakaa JDK: n moduulijoukoksi yhdistämistä varten ajo-, kokoamis- tai koontiaikana. Modulaarisuutta on kutsuttu "transitiiviseksi" muutokseksi, joka mahdollistaa riippuvuuksien ymmärtämisen moduulien välillä.

Java 9: ​​n modulaarisuuden on tarkoitus antaa kehittäjien helpommin koota ja ylläpitää kehittyneitä sovelluksia. Lisäksi sen pitäisi tehdä Java-kyvystä paremmin skaalata pienempiin laitteisiin samalla kun turvallisuutta ja suorituskykyä parannetaan.

Java 9: ​​n modulaarisuusnäkökohtiin kuuluu sovellusten pakkaus, itse JDK: n modulaatio ja lähdekoodin uudelleenjärjestäminen moduuleiksi. Koontijärjestelmää parannetaan moduulien kääntämiseksi ja moduulin rajojen toteuttamiseksi rakennusajankohtana. JDK- ja Java Runtime Environment (JRE) -kuvat rakennetaan uudelleen moduulien käsittelemiseksi. JavaFX-käyttöliittymän ohjaimet ja CSS-sovellusliittymät ovat nyt myös modulaarisia.

Useita kokoonpanoja tuetaan; seurauksena skaalautuvuutta, tietoturvaa ja sovellusten suorituskykyä tulisi parantaa. Javan helpompi skaalaus pieniin laitteisiin on modulaarisen työn keskeinen ajuri.

Modulaarisuuden ansiosta kehittäjät pystyvät paremmin rakentamaan ja ylläpitämään kirjastoja ja suuria sovelluksia sekä Java SE: lle (Standard Edition) että Java EE: lle (Enterprise Edition). Mutta Java 9: ​​n kehityksen aikana Oraclella, IBM: llä, Red Hatilla ja muilla oli suuria erimielisyyksiä siitä, kuinka tarkasti tehdä tällainen radikaali muutos alustalle. Itse moduulijärjestelmä hylättiin toukokuussa, ja se hyväksyttiin vasta toisessa äänestyksessä kesäkuussa edistymisen jälkeen.

Jopa suurten Java-toimittajien välisellä sopimuksella on edelleen kiistaa siitä, tekeekö modulaarisuus Java-kehittäjille paljon hyvää, kun jotkut asiantuntijat sanovat kyllä ​​ja toiset kieltävät. Java 9 on nyt modulaarinen riippumatta.

Jotta modulaariseen Java 9: ​​een siirtyminen olisi helpompaa, Java 9 sallii luokkien polulla olevan koodin laittoman heijastavan käytön, jota JRE käyttää luokkien ja resurssitiedostojen etsimiseen. Tämä ominaisuus estetään Java 9: ​​n jälkeen.

Kääntäjäparannukset Java 9 -koodille

Java 9 -päivityksessä on useita uusia ominaisuuksia koodin kääntämiseen, joista tärkein on ennen aikoja (AoT) -kokoelma. Vielä kokeellisessa vaiheessa tämä ominaisuus mahdollistaa Java-luokkien kokoamisen natiivikoodiksi ennen käynnistämistä virtuaalikoneessa. Tämän ominaisuuden tarkoituksena on parantaa sekä pienten että suurten sovellusten käynnistymisaikaa, ja sillä on rajoitettu vaikutus huippusuorituskykyyn.

Just-in-time (JIT) -kääntäjät ovat nopeita, mutta Java-ohjelmista on tullut niin suuria, että JIT: n lämpeneminen kestää kauan, jolloin jotkut Java-menetelmät ovat kääntämättä ja heikentäneet suorituskykyä. Aikaa edeltävän kokoamisen on tarkoitus käsitellä näitä asioita.

Mutta Java-teknologiatoimittaja Excelsiorin markkinointijohtaja Dmitry Leskov on huolissaan siitä, että ennenaikainen kokoamistekniikka ei ole tarpeeksi kypsä, ja toivoo, että Oracle olisi odottanut Java 10: een vankempaa versiota.

Java 9 tarjoaa myös Oraclen älykkään kokoamisen käyttöönoton toisen vaiheen. Tähän ominaisuuteen kuuluus javac työkalun vakaus ja siirrettävyys, jotta sitä voidaan käyttää JVM: ssä (Java Virtual Machine) oletuksena. Työkalu yleistetään myös, jotta sitä voidaan käyttää suurissa projekteissa JDK: n ulkopuolella. JDK 9 on myös päivittänytjavac kääntäjä, jotta se voi kääntää Java 9 -ohjelmat toimimaan joillakin Java-versioilla.

Toinen uusi - mutta kokeellinen - kokoamisominaisuus on Java-tason JVM Compiler Interface (JVMCI). Tämän käyttöliittymän avulla JVM voi käyttää Java-kielellä kirjoitettua kääntäjää dynaamisena kääntäjänä. JVMCI: n API tarjoaa mekanismeja virtuaalikoneiden rakenteiden käyttämiseen, käännetyn koodin asentamiseen ja liittämiseen JVM: n kokoamisjärjestelmään.

JVM-kääntäjän kirjoittamisen Java-ohjelmassa pitäisi olla mahdollista korkealaatuinen kääntäjä, jota on helpompi ylläpitää ja parantaa kuin olemassa olevia kääntäjiä, jotka on kirjoitettu C- tai C ++ -laitteella. Tämän seurauksena Java-ohjelmassa kirjoitettujen kääntäjien tulisi olla helpompia ylläpitää ja parantaa. Muita nykyisiä pyrkimyksiä Java-sisäisten kääntäjien käyttöönottamiseksi ovat Graal Project ja Project Metropolis.

Uusi kääntäjän ohjausominaisuus on tarkoitettu tarjoamaan JVM-kääntäjien hienorakeinen ja menetelmästä riippuvainen ohjaus, jolloin kehittäjät voivat antaa kääntäjän ohjausvaihtoehtoja ajon aikana ilman suorituskyvyn heikkenemistä. Työkalu mahdollistaa myös kiertotavat JVM-kääntäjävirheille.

REPL tulee lopulta Java 9: ​​een

Java 9 sisältää REPL (read-eval-print loop) -työkalun - toisen pitkän aikavälin tavoitteen Javalle, joka on todellinen tässä versiossa vuosien kehityksen jälkeen Project Kuliassa.

JShelliksi kutsuttu Java 9: ​​n REPL arvioi vuorovaikutteisesti lausekkeita ja lausekkeita. Kehittäjät voivat saada palautetta ohjelmista ennen kokoamista kirjoittamalla joitain koodirivejä.

Komentorivityökalun ominaisuuksiin kuuluu välilehden viimeistely ja tarvittavien päätepisteiden automaattinen lisääminen. JShell-sovellusliittymä sallii jShell-toiminnot IDE: ssä ja muissa työkaluissa, vaikka itse työkalu ei ole IDE.

REPL: n puuttuminen on mainittu syynä koulujen siirtymiseen pois Java-ohjelmasta. (Pythonin ja Scalan kaltaisilla kielillä on jo pitkään ollut REPL.) Mutta Scalan kielen perustaja Martin Odersky kyseenalaistaa REPL: n hyödyllisyyden Javassa sanoen, että Java on lausekekeskeinen, kun taas REPL: t ovat lausekekeskeisiä.

Stream-sovellusliittymän parannukset Java 9: ​​ssä

Java-virtojen avulla kehittäjät voivat ilmaista laskutoimituksia, jotta tietojen rinnakkaisuutta voidaan hyödyntää tehokkaasti. Java 8: n Stream-ominaisuus on tarkoitettu tietojen käsittelyyn deklaratiivisesti moniydinarkkitehtuureja hyödyntämällä.

Stream-sovellusliittymä lisää Java 9: ​​ssä menetelmiä ehdollisesti ottaa ja pudottaa kohteita Streamista, toistaa Stream-elementit ja luoda stream mitätöivästä arvosta laajentamalla samalla Java SE -sovellusliittymien joukkoa, joka voi toimia Stream-lähteinä.

Koodivälimuisti voidaan jakaa Java 9: ​​ssä

JDK 9 sallii koodivälimuistin jakamisen segmentteihin suorituskyvyn parantamiseksi ja laajennusten, kuten hienorakeisen lukituksen, sallimiseksi. Tuloksia olisi parannettava pyyhkäisyaikoina, koska erikoistuneet iteraattorit ohittavat ei-menetelmäkoodin; erottamalla ei-menetelmäinen, profiloitu ja profiloimaton koodi; ja joidenkin vertailuarvojen toteutusajan parantaminen.

Parempi JavaScript-tuki Java 9: ​​ssä Project Nashornin kautta

Project Nashorn, joka tarjoaa Java: lle kevyen JavaScripti-ajoajan, paranee JDK 9: ssä. Project Nashorn yritti toteuttaa korkean suorituskyvyn mutta kevyen JavaScripti-ajonaikan Java-ohjelmassa seuraten Netscape-ohjelmassa aloitettua Rhino-projektia. Project Nashornia syytettiin Java-sovellusten upottamisen mahdollistamisesta. Se toimitti Java Java-moottorilla JDK 8: ssa.

JDK 9 sisältää jäsenninsovellusliittymän Nashornin ECMAScript-syntaksipuun. Sovellusliittymä mahdollistaa ECMAScript-koodianalyysin IDE: n ja palvelinpuolen kehysten avulla riippumatta Project Nashornin sisäisistä toteutusluokista.

HTTP / 2-asiakasohjelman sovellusliittymä tulee Java 9: ​​een

Beeta HTTP / 2 -asiakassovellusliittymä on tullut JDK 9: een, joka toteuttaa Java-päivityksen verkon ydin-HTTP-protokollaan. WebSocket tukee myös API: ta.

HTTP / 2-sovellusliittymä voi korvata HttpURLConnection-sovellusliittymän, jolla on ollut ongelmia, muun muassa sen, että se on suunniteltu nyt käytöstä poistetuilla protokollilla, ennen HTTP / 1: tä, liian abstrakti ja vaikeasti käytettävä.

Parannettu Java 9: ​​n HTML5- ja Unicode-tuki

JDK 9: ssä Javadoc-dokumentointityökalua parannetaan HTML5-merkintöjen luomiseksi. Tuetaan myös Unicode 8.0 -koodausstandardia - joka lisää 8000 merkkiä, 10 lohkoa ja kuusi komentosarjaa.

DTLS-suojausrajapinta lisätään Java 9: ​​een

Turvallisuussyistä Java 9 lisää API: n DTLS: lle (Datagram Transport Layer Security). Protokolla on suunniteltu estämään salakuuntelu, peukalointi ja viestien väärentäminen asiakas / palvelin-viestinnässä. Toteutus tarjotaan sekä asiakas- että palvelintiloille.

Mitä Java 9 hylkää ja poistaa

Java 9 hylkää tai poistaa useita ominaisuuksia, jotka eivät enää ole muodissa. Tärkein heistä on Applet API, joka on vanhentunut. Nyt on mennyt tyylistä, kun tietoturvatietoiset selainvalmistajat ovat poistaneet Java-selainlaajennusten tuen. HTML5: n tulo auttoi myös heidän kuolemaansa. Kehittäjät ohjataan nyt vaihtoehtoihin, kuten Java Web Start, sovellusten käynnistämiseen selaimelta tai asennettaviin sovelluksiin.

Appletviewer-työkalu on myös vanhentunut.

Java 9 kumoaa myös samanaikaisen CMS-roskakorin, ja tuki lopetetaan tulevassa julkaisussa. Tarkoitus on nopeuttaa muiden roskakeräilijöiden kehittämistä HotSpot-virtuaalikoneessa. Pienen tauon G1-roskakorin on tarkoitus olla pitkäaikainen korvaus CMS: lle.

Samaan aikaan JDK 8: ssa aiemmin vanhentuneet roskien keräysyhdistelmät poistetaan JDK 9: stä. Näihin kuuluvat harvoin käytetyt yhdistelmät, kuten Inkrementaalinen CMS, ParNew + SerialOld ja DefNew + CMS, jotka lisäsivät ylimääräistä monimutkaisuutta roskakorin koodipohjaan.

Java 9 piilottaa myös Java-varoitukset tuontilausekkeista auttaakseen tekemään suuret koodipohjat puhtaiksi nukkaavaroituksista. Näillä koodiperusteilla vanhentuneita toimintoja on usein tuettava jonkin aikaa, mutta vanhentuneen rakenteen tuominen ei takaa varoitusviestiä, jos rakenteen käyttö on tarkoituksellista ja estetty.

Java 9: ​​sta poistetaan myös mahdollisuus valita JRE käynnistyshetkellä Multiple JRE (mJRE) -ominaisuuden avulla. Tätä ominaisuutta käytettiin harvoin, se vaikeutti Java-käynnistysohjelman toteuttamista, eikä sitä koskaan dokumentoitu täysin, kun se esiteltiin JDK 5: ssä.

Oracle on poistanut JVM TI (Tool Interface) hprof (Heap Profiling) -agentin, joka on korvattu JVM: ssä. Myös jhat-työkalu poistettiin, koska ylivertaiset kasan visualisointilaitteet ja analysaattorit olivat tehneet sen vanhentuneeksi.

Java 9 on rivinsa loppu uuden Java 9 -linjan alkaessa

Voit sanoa, että Java 9 on menossa räjähdysmäisesti kaikilla uusilla ominaisuuksilla. Oracle paljasti äskettäin, että Java 9 on viimeinen laatuaan, nimeltään ja suurten julkaisujen välillä kuluneelta ajalta.

Tästä eteenpäin Java: lla on suunniteltu olevan kuuden kuukauden julkaisutahti, ja seuraava pääversio on nimeltään Java 18.3, määräaika maaliskuussa 2018, jota seuraa Java 18.9 kuusi kuukautta myöhemmin.

Javan uusi julkaisutahti tarkoittaa myös sitä, että JDK 9: tä ei nimetä pitkäaikaiseksi tukijulkaisuksi. Sen sijaan seuraava pitkäaikainen julkaisu on Java 18.9.

Javan nopeampi julkaisutahti tarkoittaa, että kehittäjien ei tarvitse odottaa niin kauan suuria julkaisuja. Se voi myös tarkoittaa, että kehittäjät ohittavat Java 9: ​​n ja sen "epäkypsä" modulaarisuusominaisuudet ja odottavat kuusi kuukautta uutta versiota, mikä todennäköisesti silittää kaikki kinks, kertoi Java-edustajien ZeroTurnaroundin Java-edunvalvontajohtaja Simon Maple.