Java 9-funktioner og forbedringer



Den modulære ramme, der er udviklet under Project Jigsaw & store Java 9-funktioner i denne blog, er JShell (REPL-værktøj), vigtige API-ændringer og JVM-niveauændringer.

Udgivelsen af ​​Java 9 og Java 9-funktioner er en milepæl for Java-økosystemet.At holde trit med nye udgivelser er vigtigt for at holde dig opdateret med teknologien og forstå behovet bag det, der bliver introduceret, vil bringe dig tættere på din .Den modulære ramme, der er udviklet under Project Jigsaw, vil være en del af denne Java SE-udgivelse, og de vigtigste funktioner i dette er JShell (REPL-værktøjet), vigtige API-ændringer og JVM-niveauændringer for at forbedre JVM's ydeevne og debuggabilitet.

Før vi afslører Java 9-funktionerne i detaljer, lad os kigge på tidligere Java-versioner og se, hvad der var manglerne, og hvordan Java 9 hjalp med at overvinde disse uregelmæssigheder: -





  • Java Standard Edition-platformen og JDK var ikke tilgængelige for små computerenheder
  • Der var ingen overordnet sikkerhed og vedligeholdelse af JDK
  • Der var ingen generel forbedring i applikationsydelsen
  • Det var vanskeligt for Java-udviklere at opbygge og opretholde kodebibliotekerne og større applikationer til både Java SE- og EE-platformene

I dette blogindlæg vil jeg kategorisere Java 9-funktioner på følgende måde:



  1. Behandl API-opdateringer i Java 9
  2. HTTP / 2-klient i Java 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) i Java 9
  4. JAR-filer med flere frigivelser har Java 9
  5. Flere samtidige opdateringer funktion i Java 9
  6. Project Jigsaw i Java 9

Hvad er nyt i Java 9?

Jeg har valgt et par nye Java 9-funktioner, som jeg føler er værd at vide om. Lad os se, hvad disse funktioner er: -

Behandl API-opdateringer i Java 9

Java's Process API har været ret primitiv,med support kun for at starte nye processer, omdirigere processernes output og fejlstrømme. I denne udgivelse muliggør opdateringerne til Process API følgende:

  • Få PID for den aktuelle JVM-proces og andre processer, der er skabt af JVM
  • Tæl de processer, der kører i systemet, for at få oplysninger såsom PID, navn og ressourceforbrug
  • Styring af procestræer
  • Håndtering af underprocesser

Lad os se på en prøvekode, der udskriver den aktuelle PID såvel som den aktuelle procesinformation:



offentlig klasse 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 i Java 9

Denne Java 9-funktion forventes at ændre sig i de efterfølgende udgivelser og kan endda fjernes fuldstændigt.

Tidligere Udviklere bruger ofte tredjepartsbiblioteker, såsom Apache HTTP, Jersey osv. Derudover går Java's HTTP API forud for HTTP / 1.1-specifikationen og er synkron og svær at vedligeholde. Disse begrænsninger krævede behovet for at tilføje en ny API. Den nye HTTP-klient-API giver følgende:

  • En enkel og kortfattet API til at håndtere de fleste HTTP-anmodninger
  • Understøttelse af HTTP / 2-specifikation
  • Bedre ydeevne
  • Bedre sikkerhed
  • Et par ekstra forbedringer

Lad os se en prøvekode for at lave en HTTP GET-anmodning ved hjælp af de nye API'er. Nedenfor er moduldefinitionen defineret i filen module-info.java:

ansible vs marionet vs kok
modul newfeatures {kræver jdk.incubator.httpclient}

Den følgende kode bruger HTTP Client API, som er en del af jdk.incubator.httpclient-modulet:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) throw Exception {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder () ny URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String respons = client.send (anmodning, HttpResponse.BodyHandler.asString ()) System.out.println ('Statuskode:' + respons.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) i Java 9

Du må have set sprog som Ruby, Scala, Groovy, Clojure og andre sende med et værktøj, der ofte kaldes REPL ( Læs-Eval-Print-Loop ). Dette REPL-værktøj er yderst nyttigt til at afprøve sprogfunktionerne. For eksempel i Scala kan vi skrive et simpelt Hello World-program som scala> println (“Hello World”)

Nogle af fordelene ved JShell REPL er som følgende:

  • Erfarne udviklere kan hurtigt prototype og eksperimentere, inden de vedtager det i deres vigtigste kodebase
  • Java-udviklere kan nu prale af en REPL

Lad os køre JShell-kommandoen som vist i følgende billede:

JShell Hello World-eksempel - Java 9 - Edureka

JAR-filer med flere frigivelsesfunktioner i Java 9

Fra nu af kan JAR-filer indeholde klasser, der kun kan køre på den Java-version, de blev kompileret til. For at udnytte de nye funktioner på Java-platformen på nyere versioner skal biblioteksudviklerne frigive en nyere version af deres bibliotek. Snart vil der være flere versioner af biblioteket, der vedligeholdes af udviklerne, hvilket kan være et mareridt. For at overvinde denne begrænsning giver disse Java 9-funktioner i JAR-filer med flere frigivelser udviklere mulighed for at opbygge JAR-filer med forskellige versioner af klassefiler til forskellige Java-versioner.Følgende eksempel gør det mere klart.

Her er en illustration af de aktuelle JAR-filer:

krukkerod - En klasse - B. klasse - C. klasse

Sådan ser multi-release JAR-filer ud:

krukkerod - En klasse - B. klasse - C. klasse - META-INF - versioner - 9 - En klasse - 10 - B. klasse

I den foregående illustration understøtter JAR-filerne klassefiler til to Java-versioner – 9 og 10.

Så når den tidligere JAR udføres på Java 9, hentes A.klassen under versionerne - 9 mapper til udførelse.

På en platform, der ikke understøtter JAR-filer med flere udgivelser, bruges klasserne under versionskataloget aldrig. Så hvis du kører JAR-filen med flere udgivelser på Java 8, er den lige så god som at køre en simpel JAR-fil.

Flere samtidige opdateringer funktion i Java 9

I denne opdatering, en ny klasse, java.util.concurrent.Flow er blevet introduceret, som har indlejrede grænseflader, der understøtter implementeringen af ​​en public-subscribe-ramme. Udgivelses-abonnementsrammen giver udviklere mulighed for at opbygge komponenter, der asynkront kan forbruge en live strøm af data ved at oprette udgivere, der producerer dataene, og abonnenter, der forbruger dataene via abonnement, der administrerer dem. De fire nye grænseflader er som følger:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (som fungerer både som udgiver og abonnent).

Project Jigsaw i Java 9

Hovedformålet med dette projekt er at introducere begrebet modularitet support til oprettelse af moduler i Java 9 og derefter anvende det samme på JDK det er, moduler JDK .

Nogle af fordele af modularitet er som følgende:

  • Stærk indkapsling : Modulerne har kun adgang til de dele af modulet, der er gjort tilgængelige for brug. Så de offentlige klasser i en pakke er ikke offentlige, medmindre pakken eksplicit eksporteres i modulinfofilen.
  • Ryd afhængigheder : Moduler skal erklære, hvilke andre moduler de vil bruge via den krævede klausul.
  • Kombination af moduler for at skabe en mindre runtime, som let kan skaleres til mindre computerenheder.
  • Pålidelig : Applikationer er mere pålidelige ved at fjerne dem kørselstid fejl . Eksempel:- du skal have oplevet, at din ansøgning mislykkedes under kørselstid på grund af manglende klasser, hvilket resulterede i ClassNotFoundException .

Der er forskellige JEPs , som er en del af dette projekt, som følger:

  • JEP 200 - modulær JDK : Dette gælder Java-platformmodulsystemet til at modulere JDK til et sæt moduler, der kan kombineres på kompileringstidspunkt, byggetid eller runtime.
  • JEP 201 - modulær kildekode : Dette modulerer JDK-kildekoden til moduler og forbedrer buildværktøjerne til at kompilere modulerne.
  • JEP 220 - modulære runtime-billeder : Dette omstrukturerer JDK- og JRE-runtime-billederne for at imødekomme moduler og forbedre ydelse, sikkerhed og vedligeholdelsesevne.
  • JEP 260 - indkapsler de fleste interne API'er : Dette giver adgang til mange interne API'er direkte eller via refleksion. Det er ganske risikabelt at få adgang til interne API'er, der er underlagt ændringer. For at forhindre dets anvendelse bliver de indkapslet i moduler, og kun de interne API'er, der er meget brugt, bliver gjort tilgængelige, indtil en ordentlig API er på plads.
  • JEP 261 - modulsystem : Dette implementerer modulsystemets Java-specifikation ved at ændre Java-programmeringssprog, JVM og andre standard-API'er
  • JEP 282: jlink, Java-linkeren : Dette tillader emballeringsmoduler og deres afhængighed i mindre køretider.

Så alt handlede om Java 9 og nye Java 9-funktioner.

Nu hvor du har forstået funktionerne i Java 9, skal du tjekke af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden.

G et spørgsmål til os? Nævn det i kommentarfeltet på denne “Java 9” -blog, og vi vender tilbage til dig hurtigst muligt.