Java 9-funktioner och förbättringar



Det modulära ramverket som utvecklats under Project Jigsaw och större Java 9-funktioner i den här bloggen är JShell (REPL-verktyg), viktiga API-ändringar och JVM-nivåändringar.

Släppet av Java 9 och Java 9-funktioner är en milstolpe för Java-ekosystemet.Att hålla koll på nya versioner är viktigt för att hålla dig uppdaterad med tekniken och förstå behovet bakom vad som introduceras kommer att närma dig din .Det modulära ramverket som utvecklats under Project Jigsaw kommer att vara en del av denna Java SE-version och de viktigaste funktionerna i detta är JShell (REPL-verktyget), viktiga API-ändringar och JVM-nivåändringar för att förbättra JVM: s prestanda och debuggabilitet.

Innan vi avslöjar Java 9-funktionerna i detalj, låt oss ta en titt på tidigare Java-versioner och se vad som var bristerna och hur Java 9 hjälpte till att övervinna dessa avvikelser: -





  • Java Standard Edition-plattformen och JDK var inte navigerbara för små datorenheter
  • Det fanns ingen övergripande säkerhet och underhåll av JDK
  • Det fanns ingen övergripande förbättring av applikationsprestanda
  • Det var svårt för Java-utvecklare att bygga och upprätthålla kodbiblioteken och större applikationer för både Java SE- och EE-plattformarna

I det här blogginlägget kommer jag att kategorisera Java 9-funktioner på följande sätt:



  1. Bearbeta API-uppdateringar 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 flera utgåvor har Java 9
  5. Fler samtidiga uppdateringar har Java 9
  6. Project Jigsaw i Java 9

Vad är nytt i Java 9?

Jag har valt några nya Java 9-funktioner, som jag tycker är värda att veta om. Låt oss se vad som är dessa funktioner: -

Bearbeta API-uppdateringar i Java 9

Java: s Process API har varit ganska primitivt,med stöd endast för att starta nya processer, omdirigera processernas utdata och felströmmar. I den här versionen möjliggör uppdateringarna av Process API följande:

använder namnrymd c ++
  • Få PID för den aktuella JVM-processen och alla andra processer som skapats av JVM
  • Räkna upp de processer som körs i systemet för att få information som PID, namn och resursanvändning
  • Hantera processträd
  • Hantera delprocesser

Låt oss titta på en exempelkod, som skriver ut aktuell PID och aktuell processinformation:



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

Denna Java 9-funktion förväntas förändras i efterföljande utgåvor och kan till och med tas bort helt.

Tidigare Utvecklare använder ofta tredjepartsbibliotek, som Apache HTTP, Jersey och så vidare. Utöver detta är Java: s HTTP API före HTTP / 1.1-specifikationen och är synkron och svår att underhålla. Dessa begränsningar krävde behovet av att lägga till ett nytt API. Det nya HTTP-klient-API: et ger följande:

  • Ett enkelt och koncist API för att hantera de flesta HTTP-förfrågningar
  • Stöd för HTTP / 2-specifikation
  • Bättre prestanda
  • Bättre säkerhet
  • Några förbättringar till

Låt oss se en exempelkod för att göra en HTTP GET-begäran med de nya API: erna. Nedan är moduldefinitionen definierad i filen module-info.java:

modulens nya funktioner {kräver jdk.incubator.httpclient}

Följande kod använder HTTP Client API, som ingår i jdk.incubator.httpclient-modulen:

importera jdk.incubator.http. * importera 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 response = client.send (begäran, HttpResponse.BodyHandler.asString ()) System.out.println ('Statuskod:' + respons.statusCode ())
System.out.println ('Response Body:' + response.body ())}}

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

Du måste ha sett språk, som Ruby, Scala, Groovy, Clojure och andra som sänder med ett verktyg, som ofta kallas REPL ( Läs-Eval-Print-Loop ). Detta REPL-verktyg är extremt användbart för att prova språkfunktionerna. I Scala kan vi till exempel skriva ett enkelt Hello World-program som scala> println (“Hello World”)

Några av fördelarna med JShell REPL är följande:

  • Erfarna utvecklare kan snabbt prototypa och experimentera innan de antar det i sin huvudsakliga kodbas
  • Java-utvecklare kan nu skryta med en REPL

Låt oss köra JShell-kommandot, som visas i följande bild:

JShell Hello World Exempel - Java 9 - Edureka

JAR-filer med flera utgåvor har Java 9

Från och med nu kan JAR-filer innehålla klasser som bara kan köras på Java-versionen de kompilerades för. För att utnyttja Java-plattformens nya funktioner på nyare versioner måste biblioteksutvecklarna släppa en nyare version av sitt bibliotek. Snart kommer det att finnas flera versioner av biblioteket som underhålls av utvecklarna, vilket kan vara en mardröm. För att övervinna denna begränsning tillåter dessa Java 9-funktioner i JAR-filer med flera versioner utvecklare att bygga JAR-filer med olika versioner av klassfiler för olika Java-versioner.Följande exempel gör det tydligare.

Här är en illustration av de aktuella JAR-filerna:

sql server tutorial för nybörjare
burkrot - En klass - B. klass - C. klass

Så här ser JAR-filer med flera versioner ut:

burkrot - En klass - B. klass - C. klass - META-INF - versioner - 9 - En klass - 10 - B. klass

I föregående illustration stöder JAR-filerna klassfiler för två Java-versioner – 9 och 10.

Så när den tidigare JAR körs på Java 9, plockas A.klassen under versionerna - 9 mappar för körning.

På en plattform som inte stöder JAR-filer med flera versioner används aldrig klasserna under versionskatalogen. Så om du kör JAR-filen med flera versioner på Java 8 är det lika bra som att köra en enkel JAR-fil.

Fler samtidiga uppdateringar har Java 9

I den här uppdateringen, en ny klass, java.util.concurrent.Flow har införts, som har kapat gränssnitt som stöder implementeringen av ett publiceringsprenumerationsramverk. Ramverket för publicera-prenumeration gör det möjligt för utvecklare att bygga komponenter som asynkront kan konsumera en livestream av data genom att ställa in publicister som producerar data och abonnenter som konsumerar data via prenumeration som hanterar dem. De fyra nya gränssnitten är som följer:

vad är formatet i python
  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (som fungerar både som utgivare och prenumerant).

Project Jigsaw i Java 9

Huvudsyftet med detta projekt är att introducera begreppet modularitet Stöd för att skapa moduler i Java 9 och sedan använda samma på JDK det är, modulera JDK .

Några av fördelar av modularitet är följande:

  • Stark inkapsling : Modulerna har endast åtkomst till de delar av modulen som har gjorts tillgängliga för användning. Så de offentliga klasserna i ett paket är inte offentliga om inte paketet exporteras uttryckligen i modulinfofilen.
  • Rensa beroende : Moduler måste deklarera vilka andra moduler de skulle använda via kravsatsen.
  • Kombinera moduler för att skapa en mindre körtid, som enkelt kan skalas till mindre datorenheter.
  • Pålitlig : Applikationer är mer tillförlitliga genom att eliminera körning fel . Exempel:- du måste ha upplevt att din ansökan misslyckades under körning på grund av saknade klasser, vilket resulterade i ClassNotFoundException .

Det finns olika JEP , som ingår i detta projekt, enligt följande:

  • JEP 200 - modulär JDK : Detta gäller Java-plattformsmodulsystemet för att modulera JDK till en uppsättning moduler som kan kombineras vid kompileringstid, byggtid eller körtid.
  • JEP 201 - modulär källkod : Detta modulerar JDK-källkoden till moduler och förbättrar byggverktygen för att kompilera modulerna.
  • JEP 220 - modulära runtime-bilder : Detta omstrukturerar JDK- och JRE-runtime-bilder för att rymma moduler och för att förbättra prestanda, säkerhet och underhållsförmåga.
  • JEP 260 - inkapslar de flesta interna API: er : Detta gör att många interna API: er kan nås direkt eller via reflektion. Åtkomst till interna API: er som kommer att ändras är ganska riskabelt. För att förhindra dess användning kapslas de in i moduler och endast de interna API: er som används i stor utsträckning görs tillgängliga tills ett korrekt API finns på plats.
  • JEP 261 - modulsystem : Detta implementerar modulsystemets Java-specifikation genom att ändra Java-programmeringsspråk, JVM och andra standard-API: er
  • JEP 282: jlink, Java-länkaren : Detta möjliggör förpackningsmoduler och deras beroenden i mindre körtider.

Så allt handlade om Java 9 och nya Java 9-funktioner.

Nu när du har förstått funktionerna i Java 9, kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen.

G har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna “Java 9” -blogg så återkommer vi till dig så snart som möjligt.