Java 9 funktsioonid ja täiustused



Selles blogis projekti Jigsaw ja Java 9 peamiste funktsioonide raames välja töötatud moodulraamistik on JShell (tööriist REPL), olulised API muudatused ja JVM-taseme muudatused.

Java 9 ja Java 9 funktsioonide väljaandmine on Java ökosüsteemi jaoks verstapost.Uute väljaannetega kursis olemine on oluline tehnoloogiaga kursis püsimiseks ja kasutusele võetavate vajaduste mõistmiseks, mis suunavad teid lähemale .Projekti Jigsaw raames välja töötatud moodulraamistik saab olema osa sellest Java SE väljalasest ja selle peamisteks funktsioonideks on JShell (tööriist REPL), olulised API muudatused ja JVM-taseme muudatused JVM-i jõudluse ja silumisvõime parandamiseks.

Enne Java 9 funktsioonide üksikasjalikku lahti harutamist heitkem pilk eelmistele Java versioonidele ja vaadake, millised olid puudused ja kuidas Java 9 aitas nendest kõrvalekalletest üle saada:





  • Java Standard Editioni platvorm ja JDK ei olnud väikeste arvutiseadmete jaoks navigeeritavad
  • JDK üldist turvalisust ja hooldust ei olnud
  • Rakenduse jõudlust üldiselt ei paranenud
  • Java arendajatel oli nii Java SE kui ka EE platvormide jaoks keeruline luua ja hooldada koodide teeke ja suuremaid rakendusi

Selles blogipostituses kategoriseerin Java 9 funktsioonid järgmiselt:



  1. Töötle Java 9 API-värskendusi
  2. HTTP / 2 klient Java 9-s
  3. Java Shelli skriptimine (Read-Eval-Print-Loop) Java 9-s
  4. Java 9-s on mitme väljalaskega JAR-failide funktsioon
  5. Veel üheaegse värskendamise funktsiooni Java 9-s
  6. Projekt Jigsaw Java 9-s

Mida uut on Java 9-s?

Olen valinud mõned uued Java 9 funktsioonid, mida minu arvates tasub teada. Vaatame, mis on need funktsioonid: -

Töötle Java 9 API-värskendusi

Java protsessi API on olnud üsna primitiivne,ainult uute protsesside käivitamiseks, suunavad protsesside väljundi ja vea voogudesse. Selles väljaandes võimaldavad protsessi API värskendused järgmist:

  • Praeguse JVM-i protsessi ja kõigi muude JVM-i poolt sündinud protsesside PID-de saamine
  • Loetlege süsteemis töötavaid protsesse, et saada teavet, näiteks PID, nimi ja ressursikasutus
  • Protsessipuude haldamine
  • Alamprotsesside haldamine

Vaatame näidiskoodi, mis prindib nii praeguse PID kui ka praeguse protsessiteabe:



public class NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('Info:' + currentProcessInfo)}

HTTP / 2 klient Java 9-s

Eeldatavasti muutub see Java 9 funktsioon järgmistes versioonides ja võib isegi täielikult eemaldada.

Varem Arendajad kasutavad sageli kolmandate osapoolte teekide, näiteks Apache HTTP, Jersey jne kasutamist. Lisaks sellele on Java HTTP API varasem kui HTTP / 1.1 spetsifikatsioon ning on sünkroonne ja seda on raske hooldada. Need piirangud tingisid vajaduse lisada uus API. Uus HTTP-kliendi API pakub järgmist:

  • Lihtne ja ülevaatlik API enamiku HTTP-päringutega tegelemiseks
  • HTTP / 2 spetsifikatsiooni tugi
  • Parem sooritus
  • Parem turvalisus
  • Veel mõned täiustused

Uute API-de abil HTTP GET-päringu tegemiseks vaadake näidiskoodi. Allpool on moodulis määratletud failis module-info.java:

moodul newfeatures {nõuab jdk.incubator.httpclient}

Järgmine kood kasutab HTTP-kliendi API-d, mis on mooduli jdk.incubator.httpclient osa:

import jdk.incubator.http. * import java.net.URI avalik klass Http2Feature {public static void main (String [] args) viskab erandi {HttpClient klient = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( uus URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ('Olekukood:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Java Shelli skriptimine (Read-Eval-Print-Loop) Java 9-s

Olete kindlasti näinud keeli, nagu rubiin, scala, groovy, clojure jt tööriistaga, mida sageli nimetatakse VASTUS ( Loe-hinda-prindi-aas ). See tööriist REPL on keelefunktsioonide proovimisel äärmiselt kasulik. Näiteks Scalas saame kirjutada lihtsa Hello Worldi programmi as scala> println (“Tere maailm”)

Mõned eelised JShell REPL on järgmised:

c c ++ ja java erinevus
  • Kogenud arendajad saavad kiiresti prototüübi teha ja katsetada, enne kui nad oma peamises koodibaasis üle võtavad
  • Java-arendajad saavad nüüd kiidelda REPL-iga

Käivitame JShelli käsu, nagu on näidatud järgmisel pildil:

JShelli Tere maailma näide - Java 9 - Edureka

Java 9-s on mitme väljalaskega JAR-failide funktsioon

Praeguseks võivad JAR-failid sisaldada klasse, mis võivad töötada ainult Java-versioonis, mille jaoks need olid koostatud. Java platvormi uute funktsioonide kasutamiseks uuemates versioonides peavad raamatukogu arendajad välja andma oma teegi uuema versiooni. Varsti on arendajate hooldatud raamatukogu mitu versiooni, mis võib olla õudusunenägu. Selle piirangu ületamiseks võimaldavad need Java 9 mitme väljalaskega JAR-failide funktsioonid arendajatel luua JAR-faile klassifailide erinevate versioonidega erinevate Java-versioonide jaoks.Järgmine näide teeb selle selgemaks.

Siin on praeguste JAR-failide illustratsioon:

purgi juur - Klass - B.klass - C.klass

Nii näeb välja mitme väljalaskega JAR-fail:

purgi juur - Klass - B.klass - C.klass - META-INF - versioonid - 9 - Klass - 10 - B.klass

Eelmises illustratsioonis toetavad JAR-failid klassi Java faile kahele Java-versioonile - 9 ja 10.

Niisiis, kui varasem JAR käivitatakse Java 9-s, tõstetakse A.-klass versioonide 9 kaustade alla.

Platvormil, mis ei toeta mitme väljalaskega JAR-faile, ei kasutata kunagi versioonide kataloogi klasse. Nii et kui käivitate mitme väljalaskega JAR-faili Java 8-s, on see sama hea kui lihtsa JAR-faili käitamine.

Veel üheaegse värskendamise funktsiooni Java 9-s

Selles värskenduses on uus klass java.util.concurrent.Flow kasutusele on võetud pesastatud liidesed, mis toetavad avaldamise-tellimise raamistiku rakendamist. Raamistik Publish-Subscribe võimaldab arendajatel luua komponente, mis suudavad asünkroonselt tarbida reaalajas andmevoogu, seadistades andmeid tootvad väljaandjad ja tellijaid, kes neid andmeid tellimise kaudu haldavad. Neli uut liidest on järgmised:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (mis toimib nii avaldaja kui ka tellijana).

Projekt Jigsaw Java 9-s

Selle projekti peamine eesmärk on tutvustada projekti modulaarsus toetus Java 9-s moodulite loomiseks ja seejärel rakendage sama JDK see on, moduleerida JDK .

Mõned kasu kohta modulaarsus on järgmised:

  • Tugev kapseldamine : Moodulitel on juurdepääs ainult neile mooduli osadele, mis on kasutamiseks kättesaadavaks tehtud. Seega pole paketi avalikud klassid avalikud, välja arvatud juhul, kui pakett on otseselt eksporditud mooduli infofaili.
  • Selge sõltuvused : Moodulid peavad nõude klausli kaudu deklareerima, milliseid muid mooduleid nad kasutaksid.
  • Moodulite kombineerimine väiksema tööaja loomiseks, mida saab hõlpsasti skaleerida väiksemateks arvutiseadmeteks.
  • Usaldusväärne : Rakendused on kõrvaldamise kaudu usaldusväärsemad jooksuaeg vigu . Näide: - peate olema kogenud, et teie rakendus töötab käitamise ajal klasside puudumise tõttu ebaõnnestunud, mille tulemuseks on ClassNotFoundException .

Neid on erinevaid JEP-id , mis on osa sellest projektist, järgmiselt:

  • JEP 200 - modulaarne JDK : See rakendab Java platvormimoodulisüsteemi JDK modulaarseks muutmiseks moodulite komplektiks, mida saab kombineerida kompileerimise ajal, koostamise ajal või käitusajal.
  • JEP 201 - modulaarne lähtekood : See moduleerib JDK lähtekoodi mooduliteks ja täiustab moodulite kompileerimiseks koostamisvahendeid.
  • JEP 220 - modulaarsed runtime pildid : See muudab JDK ja JRE käitusaja pilte ümber moodulite mahutamiseks ning jõudluse, turvalisuse ja hooldatavuse parandamiseks.
  • JEP 260 - kapseldab enamiku sisemisi API-sid : See võimaldab paljudele sisemistele API-dele juurde pääseda otse või peegelduse kaudu. Sisemiste API-de juurde pääsemine, mis on seotud muutustega, on üsna riskantne. Selle kasutamise vältimiseks kapseldatakse need moodulitesse ja tehakse kättesaadavaks ainult need laialdaselt kasutatavad sisemised API-d, kuni õige API on oma kohal.
  • JEP 261 - moodulite süsteem : See rakendab moodulisüsteemi Java spetsifikatsiooni, muutes Java programmeerimiskeelt, JVM-i ja muid standardseid API-sid
  • JEP 282: Java linker jlink : See võimaldab pakendada mooduleid ja nende sõltuvust väiksemateks tööaegadeks.

See kõik puudutas Java 9 ja uusi Java 9 funktsioone.

Nüüd, kui olete Java 9 funktsioonidest aru saanud, vaadake järgmist autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma.

G kas meile on küsimus? Palun mainige seda selle Java 9 ajaveebi kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.