Java 9 Značajke i poboljšanja



Modularni okvir razvijen u sklopu Jigsaw projekta i glavne značajke Java 9 na ovom blogu su JShell (alat REPL), važne promjene API-ja i promjene na JVM razini.

Izdanje Java 9 i Java 9 značajki prekretnica je za Java ekosustav.Pratiti nova izdanja važno je da biste bili u toku s tehnologijom i razumjeli potrebu iza onoga što se uvodi približit će vas vašem .Modularni okvir razvijen u sklopu Jigsaw projekta bit će dio ovog izdanja Java SE, a njegove glavne značajke su JShell (alat REPL), važne promjene API-ja i promjene na razini JVM-a za poboljšanje performansi i otklanjanje pogrešaka JVM-a.

Prije nego što detaljno razotkrijemo značajke Jave 9, zavirimo u prethodne verzije Jave i vidimo koji su nedostaci i kako je Java 9 pomogao prevladati te anomalije: -





  • Platforma Java Standard Edition i JDK nisu bili plovni za male računalne uređaje
  • Nije bilo sveukupne sigurnosti i održavanja JDK
  • Nije bilo ukupnog poboljšanja u izvedbi aplikacije
  • Java programerima bilo je teško izgraditi i održavati knjižnice koda i veće programe, kako za Java SE, tako i za EE platforme

U ovom postu na blogu kategorizirat ću značajke Java 9 na sljedeći način:



  1. Obradite ažuriranja API-ja u Javi 9
  2. HTTP / 2 klijent u Javi 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) u Javi 9
  4. Značajke JAR datoteka s više izdanja imaju značajku Java 9
  5. Značajka više istodobnosti ažuriranja u Javi 9
  6. Projekt Jigsaw u Javi 9

Što je novo u Javi 9?

Odabrao sam nekoliko novih značajki Java 9 za koje smatram da ih vrijedi znati. Pogledajmo koje su to značajke: -

Obradite ažuriranja API-ja u Javi 9

Java's Process API je prilično primitivan,uz podršku samo za pokretanje novih procesa, preusmjeravaju izlazne podatke procesa i tokove pogrešaka. U ovom izdanju ažuriranja API-ja procesa omogućuju sljedeće:

  • Dobivanje PID-a trenutnog JVM procesa i svih ostalih procesa koje je JVM stvorio
  • Nabrojite procese koji se izvode u sustavu da biste dobili informacije poput PID-a, imena i upotrebe resursa
  • Upravljanje procesnim stablima
  • Upravljanje potprocesima

Pogledajmo primjer koda koji ispisuje trenutni PID kao i trenutne informacije o procesu:



javna klasa 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 klijent u Javi 9

Očekuje se da će se ova značajka Java 9 promijeniti u sljedećim izdanjima, a možda će biti i potpuno uklonjena.

Ranije Programeri često pribjegavaju korištenju biblioteka trećih strana, kao što su Apache HTTP, Jersey i tako dalje. Uz to, Javin HTTP API prethodi HTTP / 1.1 specifikaciji te je sinkron i težak za održavanje. Ta su ograničenja zahtijevala potrebu za dodavanjem novog API-ja. Novi API HTTP klijenta pruža sljedeće:

c vs c ++ vs java
  • Jednostavan i sažet API za rješavanje većine HTTP zahtjeva
  • Podrška za HTTP / 2 specifikaciju
  • Bolja izvedba
  • Bolja sigurnost
  • Još nekoliko poboljšanja

Pogledajmo primjer koda za izradu HTTP GET zahtjeva pomoću novih API-ja. Ispod je definicija modula definirana u datoteci module-info.java:

modul newfeatures {zahtijeva jdk.incubator.httpclient}

Sljedeći kôd koristi HTTP API klijenta, koji je dio modula jdk.incubator.httpclient:

kako postaviti put do klase u linuxu
import jdk.incubator.http. * import java.net.URI javna klasa Http2Feature {public static void main (String [] args) baca izuzetak {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder novi URI (http://httpbin.org/get)) .GET () .verzija (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String odgovor = client.send (zahtjev, HttpResponse.BodyHandler.asString ()) System.out.println ('Statusni kôd:' + response.statusCode ())
System.out.println ('Tijelo odgovora:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) u Javi 9

Sigurno ste vidjeli da se jezici, poput Ruby, Scala, Groovy, Clojure i drugih, isporučuju s alatom, koji se često naziva ZAMJ ( Čitanje-Eval-Ispis-petlja ). Ovaj alat REPL izuzetno je koristan u isprobavanju jezičnih značajki. Na primjer, u Scali možemo napisati jednostavan program Hello World kao scala> println ('Pozdrav svijetu')

Neke od prednosti JShell REPL su kako slijedi:

  • Iskusni programeri mogu brzo prototipirati i eksperimentirati prije nego što ga usvoje u svoju glavnu bazu koda
  • Programeri Java sada se mogu pohvaliti REPL-om

Pokrenimo naredbu JShell, kao što je prikazano na sljedećoj slici:

Primjer JShell Hello World - Java 9 - Edureka

Značajke JAR datoteka s više izdanja imaju značajku Java 9

Od sada JAR datoteke mogu sadržavati klase koje se mogu izvoditi samo na Javinoj verziji za koju su prevedene. Da bi iskoristili nove značajke Java platforme na novijim verzijama, programeri knjižnica moraju objaviti noviju verziju svoje knjižnice. Uskoro će programeri održavati više verzija biblioteke, što može biti noćna mora. Da bi se prevladalo ovo ograničenje, ove značajke Java 9 JAR datoteka s više izdanja omogućavaju programerima da grade JAR datoteke s različitim verzijama datoteka klasa za različite verzije Jave.Sljedeći primjer to čini jasnijim.

Evo ilustracije trenutnih JAR datoteka:

korijen staklenke - Razred - B.razred - C.razred

Evo kako izgledaju JAR datoteke s više izdanja:

korijen staklenke - Razred - B.razred - C.razred - META-INF - verzije - 9 - Razred - 10 - B.razred

Na prethodnoj ilustraciji, JAR datoteke podržavaju datoteke klase za dvije Java verzije - 9 i 10.

Dakle, kada se raniji JAR izvrši na Javi 9, A.class pod verzijama - 9 mapa se pokupi za izvršenje.

Na platformi koja ne podržava JAR datoteke s više izdanja, klase u direktoriju verzija se nikada ne koriste. Dakle, ako pokrenete JAR datoteku s više izdanja na Javi 8, to je jednako dobro kao pokretanje jednostavne JAR datoteke.

Značajka dodatnih ažuriranja istodobnosti u Javi 9

U ovom ažuriranju nova klasa, java.util.concurrent.Flow je predstavljen, koji ima ugniježđena sučelja koja podržavaju provedbu okvira za objavljivanje i pretplatu. Okvir objaviti-pretplatiti omogućava programerima da izgrade komponente koje mogu asinkrono trošiti prijenos podataka uživo postavljanjem izdavača koji proizvode podatke i pretplatnika koji podatke troše putem pretplate, koji njima upravlja. Četiri nova sučelja su kako slijedi:

servis sada tutorial alata za prodaju karata
  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (koji djeluje i kao izdavač i kao pretplatnik).

Projekt Jigsaw u Javi 9

Glavni cilj ovog projekta je predstaviti koncept modularnost podrška za stvaranje modula u Javi 9, a zatim primijenite isti na JDK to je, modularizirati JDK .

Neki od koristi od modularnost su kako slijedi:

  • Snažna inkapsulacija : Moduli mogu pristupiti samo onim dijelovima modula koji su stavljeni na raspolaganje. Dakle, javne klase u paketu nisu javne ako se paket eksplicitno ne izveze u datoteku s informacijama o modulu.
  • Jasne ovisnosti : Moduli se moraju izjasniti koje bi druge module koristili putem klauzule.
  • Kombiniranjem modula za stvaranje manjeg vremena izvođenja, koje se lako može prilagoditi manjim računalnim uređajima.
  • Pouzdan : Aplikacije su pouzdanije uklanjanjem vrijeme izvođenja pogreške . Primjer:- sigurno ste doživjeli neuspjeh aplikacije tijekom izvođenja zbog nedostajućih sati, što je rezultiralo ClassNotFoundException .

Postoje razni JEP-ovi , koji su dio ovog projekta, kako slijedi:

  • JEP 200 - modularni JDK : Ovo primjenjuje sustav modula Java platforme za modularizaciju JDK-a u skup modula koji se mogu kombinirati u vrijeme kompajliranja, vremena izrade ili izvođenja.
  • JEP 201 - modularni izvorni kod : Ovo modularizira JDK izvorni kod u module i poboljšava alate za izgradnju za kompajliranje modula.
  • JEP 220 - modularne runtime slike : Ovo restrukturira JDK i JRE runtime slike kako bi se prilagodili modulima i poboljšale performanse, sigurnost i održivost.
  • JEP 260 - inkapsulira većinu internih API-ja : To omogućuje pristup velikom broju internih API-ja izravno ili putem refleksije. Pristup internim API-jevima koji se moraju promijeniti prilično je rizičan. Da bi se spriječila njegova upotreba, oni se inkapsuliraju u module, a dostupni su samo oni interni API-ji koji su široko korišteni dok odgovarajući API ne bude na svom mjestu.
  • JEP 261 - modulni sustav : Ovo implementira specifikaciju Java sustava modula promjenom programskog jezika Java, JVM i drugih standardnih API-ja
  • JEP 282: jlink, povezivač Java : To omogućuje pakiranje modula i njihovih ovisnosti u manja vremena rada.

Dakle, sve je bilo u vezi s Java 9 i novim značajkama Java 9.

Sad kad ste shvatili značajke Jave 9, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta.

G ot pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'Java 9', a mi ćemo vam se javiti što je prije moguće.