Java 9-functies en verbeteringen



Het modulaire raamwerk dat is ontwikkeld onder Project Jigsaw en de belangrijkste Java 9-functies in deze blog zijn JShell (REPL-tool), belangrijke API-wijzigingen en wijzigingen op JVM-niveau.

De release van Java 9- en Java 9-functies is een mijlpaal voor het Java-ecosysteem.Het is belangrijk om op de hoogte te blijven van nieuwe releases om op de hoogte te blijven van de technologie en als u de behoefte begrijpt achter wat wordt geïntroduceerd, komt u dichter bij uw .Het modulaire raamwerk dat is ontwikkeld onder Project Jigsaw zal deel uitmaken van deze Java SE-release en de belangrijkste kenmerken hiervan zijn de JShell (REPL-tool), belangrijke API-wijzigingen en JVM-niveau-wijzigingen om de prestaties en debugbaarheid van de JVM te verbeteren.

Voordat we de Java 9-functies in detail ontrafelen, laten we een kijkje nemen in eerdere Java-versies en zien wat de tekortkomingen waren en hoe Java 9 hielp om die anomalieën te overwinnen: -





  • Het Java Standard Edition-platform en de JDK waren niet navigeerbaar voor kleine computerapparatuur
  • Er was geen algemene beveiliging en onderhoud van JDK
  • Er was geen algemene verbetering in de prestaties van de applicatie
  • Het was moeilijk voor Java-ontwikkelaars om de codebibliotheken en grotere applicaties te bouwen en te onderhouden, zowel voor de Java SE- als EE-platforms

In deze blogpost zal ik Java 9-functies op de volgende manier categoriseren:



  1. Verwerk API-updates in Java 9
  2. HTTP / 2-client in Java 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) in Java 9
  4. JAR-bestanden met meerdere releases in Java 9
  5. Meer functie voor gelijktijdigheidsupdates in Java 9
  6. Project Jigsaw in Java 9

Wat is er nieuw in Java 9?

Ik heb een paar nieuwe Java 9-functies uitgekozen, waarvan ik vind dat ze de moeite waard zijn om te weten. Laten we eens kijken wat deze kenmerken zijn: -

Verwerk API-updates in Java 9

De Process API van Java is nogal primitief geweest,met alleen ondersteuning om nieuwe processen te starten, leidt de output van de processen en foutstromen om. In deze release maken de updates van de Process API het volgende mogelijk:

  • Het verkrijgen van de PID van het huidige JVM-proces en alle andere processen die door de JVM zijn voortgebracht
  • Maak een lijst van de processen die in het systeem worden uitgevoerd om informatie te krijgen zoals PID, naam en resourcegebruik
  • Beheer van procesbomen
  • Beheer van subprocessen

Laten we eens kijken naar een voorbeeldcode, die zowel de huidige PID als de huidige procesinformatie afdrukt:



hoe je het pad instelt in java
openbare klasse NewFeatures {openbare statische leegte 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-client in Java 9

Deze Java 9-functie zal naar verwachting in de volgende releases veranderen en kan zelfs volledig worden verwijderd.

Eerder Ontwikkelaars gebruiken vaak bibliotheken van derden, zoals Apache HTTP, Jersey, enzovoort. Bovendien is de HTTP-API van Java ouder dan de HTTP / 1.1-specificatie en is deze synchroon en moeilijk te onderhouden. Deze beperkingen maakten het noodzakelijk om een ​​nieuwe API toe te voegen. De nieuwe HTTP-client-API biedt het volgende:

  • Een eenvoudige en beknopte API om met de meeste HTTP-verzoeken om te gaan
  • Ondersteuning voor HTTP / 2-specificatie
  • Betere prestatie
  • Betere beveiliging
  • Nog een paar verbeteringen

Laten we een voorbeeldcode bekijken om een ​​HTTP GET-verzoek te doen met behulp van de nieuwe API's. Hieronder vindt u de moduledefinitie die is gedefinieerd in het bestand module-info.java:

module newfeatures {vereist jdk.incubator.httpclient}

De volgende code maakt gebruik van de HTTP Client API, die deel uitmaakt van de jdk.incubator.httpclient module:

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

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

U moet talen hebben gezien, zoals Ruby, Scala, Groovy, Clojure en anderen die worden verzonden met een tool, die vaak wordt genoemd REPL ( Read-Eval-Print-Loop ). Deze REPL-tool is buitengewoon handig bij het uitproberen van de taalfuncties. In Scala kunnen we bijvoorbeeld een eenvoudig Hello World-programma schrijven als scala> println ('Hallo wereld')

Enkele van de voordelen van de JShell REPL zijn als volgt:

  • Ervaren ontwikkelaars kunnen snel prototypen maken en experimenteren voordat ze het in hun hoofdcodebasis opnemen
  • Java-ontwikkelaars kunnen nu bogen op een REPL

Laten we de JShell-opdracht uitvoeren, zoals weergegeven in de volgende afbeelding:

JShell Hello World-voorbeeld - Java 9 - Edureka

JAR-bestanden met meerdere releases in Java 9

Vanaf nu kunnen JAR-bestanden klassen bevatten die alleen kunnen worden uitgevoerd op de Java-versie waarvoor ze zijn gecompileerd. Om de nieuwe functies van het Java-platform op nieuwere versies te gebruiken, moeten de bibliotheekontwikkelaars een nieuwere versie van hun bibliotheek uitbrengen. Binnenkort zullen er meerdere versies van de bibliotheek zijn die door de ontwikkelaars worden onderhouden, wat een nachtmerrie kan zijn. Om deze beperking te omzeilen, stellen deze Java 9-functies van JAR-bestanden met meerdere releases ontwikkelaars in staat JAR-bestanden te bouwen met verschillende versies van klassebestanden voor verschillende Java-versies.Het volgende voorbeeld maakt het duidelijker.

Hier is een illustratie van de huidige JAR-bestanden:

jar root - Een klas - B. klasse - C. klasse

Hier ziet u hoe JAR-bestanden met meerdere releases eruit zien:

jar root - Een klas - B. klasse - C. klasse - META-INF - versies - 9 - Een klas - 10 - B. klasse

In de voorgaande afbeelding ondersteunen de JAR-bestanden klassebestanden voor twee Java-versies: 9 en 10.

Dus wanneer de eerdere JAR wordt uitgevoerd op Java 9, worden de A.class onder de versies - 9 mappen opgehaald voor uitvoering.

Op een platform dat geen JAR-bestanden met meerdere releases ondersteunt, worden de klassen in de directory met versies nooit gebruikt. Dus als u het JAR-bestand met meerdere releases op Java 8 uitvoert, is het net zo goed als het uitvoeren van een eenvoudig JAR-bestand.

Meer functie voor gelijktijdigheidsupdates in Java 9

In deze update, een nieuwe klasse, java.util.concurrent.Flow is geïntroduceerd, die geneste interfaces heeft die de implementatie van een publish-subscribe framework ondersteunen. Het publish-subscribe-framework stelt ontwikkelaars in staat componenten te bouwen die asynchroon een livestream van gegevens kunnen verbruiken door uitgevers op te zetten die de gegevens produceren en abonnees die de gegevens verbruiken via een abonnement, dat ze beheert. De vier nieuwe interfaces zijn als volgt:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (die fungeert als zowel uitgever als abonnee).

Project Jigsaw in Java 9

Het belangrijkste doel van dit project is om het concept van modulariteit ondersteuning voor het maken van modules in Java 9 en pas hetzelfde toe op het JDK dat is, modulariseer de JDK .

Sommige van de voordelen van modulariteit zijn als volgt:

  • Sterke inkapseling : De modules hebben alleen toegang tot die delen van de module die beschikbaar zijn gemaakt voor gebruik. De openbare klassen in een pakket zijn dus niet openbaar, tenzij het pakket expliciet wordt geëxporteerd in het module-informatiebestand.
  • Duidelijke afhankelijkheden : Modules moeten aangeven welke andere modules ze zouden gebruiken via de vereist-clausule.
  • Modules combineren om een ​​kleinere runtime te creëren, die eenvoudig kan worden geschaald naar kleinere computerapparatuur.
  • Betrouwbaar : Applicaties zijn betrouwbaarder door looptijd fouten . Voorbeeld:- u moet hebben ervaren dat uw toepassing faalt tijdens runtime vanwege ontbrekende klassen, resulterend in ClassNotFoundException .

Er zijn verschillende GEP's , die als volgt deel uitmaken van dit project:

  • JEP 200 - modulaire JDK : Dit past het Java-platformmodulesysteem toe om de JDK te modulariseren in een set modules die kunnen worden gecombineerd tijdens het compileren, bouwen of runtime.
  • JEP 201 - modulaire broncode : Dit moduleert de JDK-broncode in modules en verbetert de bouwtools om de modules te compileren.
  • JEP 220 - modulaire runtime-images : Dit herstructureert de JDK- en JRE-runtime-images om modules onder te brengen en om de prestaties, beveiliging en onderhoudbaarheid te verbeteren.
  • JEP 260 - bevatten de meeste interne API's : Hierdoor zijn veel interne API's direct of via reflectie toegankelijk. Toegang krijgen tot interne API's die aan verandering onderhevig zijn, is behoorlijk riskant. Om het gebruik ervan te voorkomen, worden ze ingekapseld in modules en worden alleen die interne API's die algemeen worden gebruikt, beschikbaar gesteld totdat er een geschikte API voor is.
  • JEP 261 - modulesysteem : Dit implementeert de Java-specificatie van het modulesysteem door de programmeertaal Java, JVM en andere standaard API's te wijzigen
  • JEP 282: jlink, de Java-linker : Hierdoor kunnen modules en hun afhankelijkheden worden verpakt in kleinere looptijden.

Dus dit ging allemaal over Java 9 en nieuwe Java 9-functies.

Nu je de functies van Java 9 hebt begrepen, kun je het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld.

G iet een vraag voor ons? Vermeld het in het commentaargedeelte van deze “Java 9” blog en we nemen zo snel mogelijk contact met u op.