Java 9: ​​n ominaisuudet ja parannukset

Tämän blogin Project Jigsaw -ohjelmassa ja Java 9: ​​n tärkeimmissä ominaisuuksissa kehitetty modulaarinen kehys on JShell (REPL-työkalu), tärkeät API-muutokset ja JVM-tason muutokset.

Java 9- ja Java 9 -ominaisuuksien julkaisu on virstanpylväs Java-ekosysteemille.Uusien julkaisujen seuraaminen on tärkeää, jotta pysyt ajan tasalla tekniikasta ja ymmärrämme tarpeen, mitä esitellään, joka ohjaa sinut lähemmäksi .Project Jigsaw -ohjelmassa kehitetty modulaarinen kehys on osa tätä Java SE -julkaisua, ja sen tärkeimmät ominaisuudet ovat JShell (REPL-työkalu), tärkeät API-muutokset ja JVM-tason muutokset JVM: n suorituskyvyn ja virheenkorjauksen parantamiseksi.

Ennen kuin selvitämme Java 9 -ominaisuudet yksityiskohtaisesti, katsokaamme edellisiä Java-versioita ja katsokaa, mitkä olivat puutteet ja miten Java 9 auttoi voittamaan nämä poikkeavuudet: -





  • Java Standard Edition -alusta ja JDK eivät olleet navigoitavissa pienille tietokonelaitteille
  • JDK: lla ei ollut yleistä turvallisuutta ja ylläpitoa
  • Sovellusten suorituskyky ei parantunut yleisesti
  • Java-kehittäjien oli vaikea rakentaa ja ylläpitää koodikirjastoja ja suurempia sovelluksia sekä Java SE- että EE-alustoille

Tässä blogikirjoituksessa luokittelen Java 9 -ominaisuudet seuraavasti:



  1. Käsittele API-päivitykset Java 9: ​​ssä
  2. HTTP / 2-asiakas Java 9: ​​ssä
  3. Java Shell Scripting (Read-Eval-Print-Loop) Java 9: ​​ssä
  4. Usean julkaisun JAR-tiedostot ovat Java 9: ​​ssä
  5. Lisää samanaikaisuuspäivityksiä Java 9: ​​ssä
  6. Projekti palapeli Java 9: ​​ssä

Mitä uutta Java 9: ​​ssä on?

Olen valinnut muutaman uuden Java 9 -ominaisuuden, joista mielestäni kannattaa tietää. Katsotaanpa, mitkä ovat nämä ominaisuudet: -

Käsittele API-päivitykset Java 9: ​​ssä

Java's Process API on ollut melko alkeellinen,tuella vain uusien prosessien käynnistämiseen, ohjaa prosessien tuotokset ja virtavirrat. Tässä julkaisussa Process API: n päivitykset mahdollistavat seuraavat:

  • Nykyisen JVM-prosessin ja muiden JVM: n synnyttämien prosessien PID-tunnuksen saaminen
  • Luettele järjestelmässä käynnissä olevat prosessit saadaksesi tietoja, kuten PID, nimi ja resurssien käyttö
  • Prosessipuiden hallinta
  • Aliprosessien hallinta

Tarkastellaan esimerkkikoodia, joka tulostaa nykyisen PID: n ja nykyiset prosessitiedot:



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-asiakas Java 9: ​​ssä

Tämän Java 9 -ominaisuuden odotetaan muuttuvan seuraavissa julkaisuissa ja se voidaan jopa poistaa kokonaan.

Aikaisemmin Kehittäjät turvautuvat usein kolmansien osapuolten kirjastojen, kuten Apache HTTP, Jersey jne. Tämän lisäksi Java: n HTTP-sovellusliittymä edeltää HTTP / 1.1-määrittelyä ja on synkroninen ja vaikea ylläpitää. Nämä rajoitukset edellyttivät uuden sovellusliittymän lisäämistä. Uusi HTTP-asiakasrajapinta tarjoaa seuraavat:

__init__ python 3
  • Yksinkertainen ja tiivis sovellusliittymä useimpien HTTP-pyyntöjen käsittelemiseksi
  • Tuki HTTP / 2-määrityksille
  • Parempi suorituskyky
  • Parempi turvallisuus
  • Muutama lisäparannus

Katsotaan esimerkkikoodi, jolla tehdään HTTP GET -pyyntö uusien sovellusliittymien avulla. Alla on moduulin määritelmä, joka on määritelty tiedostossa module-info.java:

moduulin uudet ominaisuudet {vaatii jdk.incubator.httpclient}

Seuraava koodi käyttää HTTP Client -sovellusliittymää, joka on osa jdk.incubator.httpclient-moduulia:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) heittää poikkeuksen {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( uusi 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 ('Tilakoodi:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) Java 9: ​​ssä

Olet varmasti nähnyt kieliä, kuten Ruby, Scala, Groovy, Clojure ja muita, lähettämässä työkalua, jota usein kutsutaan VASTAA ( Lue-arvioi-tulosta-silmukka ). Tämä REPL-työkalu on erittäin hyödyllinen kieliominaisuuksien kokeilussa. Esimerkiksi Scalassa voimme kirjoittaa yksinkertaisen Hello World -ohjelman nimellä scala> println (“Hei maailma”)

Joitakin JShell REPL ovat seuraavat:

  • Kokeneet kehittäjät voivat nopeasti prototyyppiä ja kokeilla ennen kuin ne otetaan käyttöön pääkoodikannassaan
  • Java-kehittäjät voivat nyt ylpeillä REPL: llä

Suoritetaan JShell-komento seuraavan kuvan mukaisesti:

JShell Hello World -esimerkki - Java 9 - Edureka

Usean julkaisun JAR-tiedostot ovat Java 9: ​​ssä

Tästä lähtien JAR-tiedostot voivat sisältää luokkia, jotka voivat toimia vain Java-versiossa, johon ne on koottu. Jos haluat hyödyntää Java-alustan uusia ominaisuuksia uusissa versioissa, kirjaston kehittäjien on julkaistava kirjastonsa uudempi versio. Pian kehittäjät ylläpitävät useita versioita kirjastosta, mikä voi olla painajainen. Tämän rajoituksen voittamiseksi nämä monen julkaisun JAR-tiedostojen Java 9 -ominaisuudet mahdollistavat kehittäjien rakentaa JAR-tiedostoja luokkatiedostojen eri versioilla eri Java-versioille.Seuraava esimerkki tekee siitä selvemmän.

Tässä on kuva nykyisistä JAR-tiedostoista:

purkin juuri - Luokka - B.luokka - C.luokka

Näin monen julkaisun JAR-tiedostot näyttävät:

purkin juuri - Luokka - B.luokka - C.luokka - META-INF - versiot - 9 - Luokka - 10 - B.luokka

Edellisessä kuvassa JAR-tiedostot tukevat kahden Java-version - 9 ja 10 luokkatiedostoja.

Joten, kun aikaisempi JAR suoritetaan Java 9: ​​ssä, A.-luokka - 9-kansioiden alla noudetaan suoritettavaksi.

Alustalla, joka ei tue usean julkaisun JAR-tiedostoja, versiohakemiston luokkia ei koskaan käytetä. Joten jos suoritat monijulkaisun JAR-tiedoston Java 8: lla, se on yhtä hyvä kuin yksinkertaisen JAR-tiedoston suorittaminen.

Lisää samanaikaisuuspäivityksiä Java 9: ​​ssä

Tässä päivityksessä uusi luokka, java.util.concurrent.Flow on otettu käyttöön, jolla on sisäkkäiset käyttöliittymät, jotka tukevat julkaisu-tilaus-kehyksen toteuttamista. Publise-tilaa-kehyksen avulla kehittäjät voivat rakentaa komponentteja, jotka voivat asynkronisesti kuluttaa suoraa tietovirtaa perustamalla julkaisijat, jotka tuottavat dataa, ja tilaajat, jotka kuluttavat tietoja tilauksen kautta, joka hallitsee niitä. Neljä uutta rajapintaa ovat seuraavat:

selittää ero muuttuvien ja muuttumattomien kohteiden välillä.
  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (joka toimii sekä julkaisijana että tilaajana).

Projekti palapeli Java 9: ​​ssä

Tämän projektin päätavoitteena on esitellä modulaarisuus tuki moduulien luomiseen Java 9: ​​ssä ja käytä sitten sitä JDK tuo on, moduloida JDK .

Jotkut edut / modulaarisuus ovat seuraavat:

  • Vahva kapselointi : Moduulit voivat käyttää vain niitä moduulin osia, jotka on asetettu käyttöön. Joten paketin julkiset luokat eivät ole julkisia, ellei pakettia nimenomaisesti viedä moduulin tietotiedostoon.
  • Poista riippuvuudet : Moduulien on ilmoitettava, mitä muita moduuleja he käyttävät vaatimuslausekkeen kautta.
  • Yhdistämällä moduulit saadaan aikaan pienempi ajonaika, joka voidaan helposti skaalata pienempiin tietokonelaitteisiin.
  • Luotettava : Sovellukset ovat luotettavampia poistamalla ajoaika virheitä . Esimerkki: - sinun on täytynyt kokea, että sovelluksesi epäonnistui ajon aikana puuttuvien luokkien vuoksi, mikä johti ClassNotFoundException .

On olemassa erilaisia JEP: t , jotka ovat osa tätä projektia, seuraavasti:

  • JEP 200 - modulaarinen JDK : Tämä käyttää Java-alustan moduulijärjestelmää moduloimaan JDK moduuleiksi, jotka voidaan yhdistää kokoamis-, koontiajan- tai ajonaikaisina.
  • JEP 201 - modulaarinen lähdekoodi : Tämä moduloi JDK-lähdekoodin moduuleiksi ja parantaa rakennustyökaluja moduulien kokoamiseksi.
  • JEP 220 - modulaariset ajonaikaiset kuvat : Tämä järjestää JDK- ja JRE-ajonaikaiset kuvat moduulien mukauttamiseksi ja suorituskyvyn, turvallisuuden ja ylläpidettävyyden parantamiseksi.
  • JEP 260 - kapseloi useimmat sisäiset sovellusliittymät : Tämä mahdollistaa useiden sisäisten sovellusliittymien käytön suoraan tai pohdinnan kautta. Sisäisten API: iden käyttö, jotka ovat sidoksissa muutoksiin, on melko riskialtista. Sen käytön estämiseksi ne kapseloidaan moduuleihin ja vain ne laajalti käytetyt sisäiset sovellusliittymät asetetaan saataville, kunnes oikea API on paikallaan.
  • JEP 261 - moduulijärjestelmä : Tämä toteuttaa moduulijärjestelmän Java-määrityksen muuttamalla Java-ohjelmointikielen, JVM: n ja muut vakio-sovellusliittymät
  • JEP 282: jlink, Java-linkitin : Tämä sallii pakkausmoduulit ja niiden riippuvuudet pienempiin ajoaikoihin.

Joten tässä oli kyse Java 9: ​​stä ja uusista Java 9 -ominaisuuksista.

Nyt kun olet ymmärtänyt Java 9: ​​n ominaisuudet, tutustu Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa.

G onko meille kysymys? Mainitse se tämän Java 9 -blogin kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.