Java 9 Funktionen und Verbesserungen



Das modulare Framework, das unter Project Jigsaw und den wichtigsten Java 9-Funktionen in diesem Blog entwickelt wurde, sind JShell (REPL-Tool), wichtige API-Änderungen und Änderungen auf JVM-Ebene.

Die Veröffentlichung der Funktionen Java 9 und Java 9 ist ein Meilenstein für das Java-Ökosystem.Es ist wichtig, mit den Neuerscheinungen auf dem Laufenden zu bleiben, um auf dem neuesten Stand der Technik zu bleiben und die Notwendigkeit der Einführung zu verstehen .Das unter Project Jigsaw entwickelte modulare Framework wird Teil dieser Java SE-Version sein. Hauptmerkmale in dieser Version sind JShell (REPL-Tool), wichtige API-Änderungen und Änderungen auf JVM-Ebene, um die Leistung und Debugbarkeit der JVM zu verbessern.

Bevor wir die Java 9-Funktionen im Detail erläutern, werfen wir einen Blick auf frühere Java-Versionen und sehen, welche Mängel es gab und wie Java 9 zur Überwindung dieser Anomalien beigetragen hat: -





  • Die Java Standard Edition-Plattform und das JDK waren für kleine Computergeräte nicht navigierbar
  • Es gab keine allgemeine Sicherheit und Wartung von JDK
  • Es gab keine allgemeine Verbesserung der Anwendungsleistung
  • Für Java-Entwickler war es schwierig, die Codebibliotheken und größeren Anwendungen sowohl für die Java SE- als auch für die EE-Plattform zu erstellen und zu verwalten

In diesem Blog-Beitrag werde ich Java 9-Funktionen folgendermaßen kategorisieren:



  1. Verarbeiten Sie 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-Dateien mit mehreren Versionen sind in Java 9 enthalten
  5. Weitere Funktionen für Parallelitätsaktualisierungen in Java 9
  6. Projekt Puzzle in Java 9

Was ist neu in Java 9?

Ich habe einige neue Java 9-Funktionen ausgewählt, die meiner Meinung nach wissenswert sind. Mal sehen, was diese Funktionen sind: -

Verarbeiten Sie API-Updates in Java 9

Die Prozess-API von Java war ziemlich primitiv.mit Unterstützung nur zum Starten neuer Prozesse, leiten Sie die Ausgabe der Prozesse und Fehlerströme um. In dieser Version ermöglichen die Aktualisierungen der Prozess-API Folgendes:

  • Abrufen der PID des aktuellen JVM-Prozesses und aller anderen von der JVM erzeugten Prozesse
  • Führen Sie die im System ausgeführten Prozesse auf, um Informationen wie PID, Name und Ressourcennutzung abzurufen
  • Prozessbäume verwalten
  • Unterprozesse verwalten

Schauen wir uns einen Beispielcode an, der die aktuelle PID sowie die aktuellen Prozessinformationen druckt:



öffentliche 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-Client in Java 9

Diese Java 9-Funktion wird sich voraussichtlich in den nachfolgenden Versionen ändern und kann sogar vollständig entfernt werden.

Vorhin Entwickler greifen häufig auf Bibliotheken von Drittanbietern zurück, z. B. Apache HTTP, Jersey usw. Darüber hinaus ist die HTTP-API von Java älter als die HTTP / 1.1-Spezifikation und synchron und schwer zu warten. Diese Einschränkungen erforderten das Hinzufügen einer neuen API. Die neue HTTP-Client-API bietet Folgendes:

  • Eine einfache und übersichtliche API für die meisten HTTP-Anforderungen
  • Unterstützung für HTTP / 2-Spezifikation
  • Bessere Leistung
  • Bessere Sicherheit
  • Noch ein paar Verbesserungen

Sehen wir uns einen Beispielcode an, um eine HTTP-GET-Anforderung mithilfe der neuen APIs zu erstellen. Unten finden Sie die Moduldefinition, die in der Datei module-info.java definiert ist:

Modul newfeatures {erfordert jdk.incubator.httpclient}

Der folgende Code verwendet die HTTP-Client-API, die Teil des Moduls jdk.incubator.httpclient ist:

Fibonacci-Serie c ++
import jdk.incubator.http. * import java.net.URI öffentliche Klasse Http2Feature {public static void main (String [] args) löst eine Ausnahme aus {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( neuer 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 ('Statuscode:' + response.statusCode ())
System.out.println ('Antworttext:' + response.body ())}}}

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

Sie müssen Sprachen wie Ruby, Scala, Groovy, Clojure und andere gesehen haben, die mit einem oft als Tool bezeichneten Tool ausgeliefert wurden REPL (( Read-Eval-Print-Loop ). Dieses REPL-Tool ist äußerst nützlich, um die Sprachfunktionen auszuprobieren. In Scala können wir beispielsweise ein einfaches Hello World-Programm als schreiben scala> println ('Hallo Welt')

Einige der Vorteile der JShell REPL sind wie folgt:

  • Erfahrene Entwickler können schnell Prototypen erstellen und experimentieren, bevor sie diese in ihre Hauptcodebasis übernehmen
  • Java-Entwickler können sich jetzt einer REPL rühmen

Führen Sie den Befehl JShell aus, wie in der folgenden Abbildung dargestellt:

JShell Hello World Beispiel - Java 9 - Edureka

JAR-Dateien mit mehreren Versionen sind in Java 9 enthalten

Ab sofort können JAR-Dateien Klassen enthalten, die nur auf der Java-Version ausgeführt werden können, für die sie kompiliert wurden. Um die neuen Funktionen der Java-Plattform für neuere Versionen nutzen zu können, müssen die Bibliotheksentwickler eine neuere Version ihrer Bibliothek veröffentlichen. In Kürze werden mehrere Versionen der Bibliothek von den Entwicklern verwaltet, was ein Albtraum sein kann. Um diese Einschränkung zu überwinden, können Entwickler mit diesen Java 9-Funktionen von JAR-Dateien mit mehreren Versionen JAR-Dateien mit verschiedenen Versionen von Klassendateien für verschiedene Java-Versionen erstellen.Das folgende Beispiel macht es deutlicher.

Hier ist eine Illustration der aktuellen JAR-Dateien:

Glaswurzel - Eine Klasse - B. Klasse - C. Klasse

So sehen JAR-Dateien mit mehreren Versionen aus:

Glaswurzel - Eine Klasse - B. Klasse - C. Klasse - META-INF - Versionen - 9 - Eine Klasse - 10 - B. Klasse

In der vorherigen Abbildung unterstützen die JAR-Dateien Klassendateien für zwei Java-Versionen - 9 und 10.

Wenn also die frühere JAR auf Java 9 ausgeführt wird, wird die A.class unter den Ordnern - Versionen 9 zur Ausführung abgeholt.

Auf einer Plattform, die keine JAR-Dateien mit mehreren Versionen unterstützt, werden die Klassen im Versionsverzeichnis niemals verwendet. Wenn Sie also die JAR-Datei mit mehreren Versionen unter Java 8 ausführen, ist dies genauso gut wie das Ausführen einer einfachen JAR-Datei.

Weitere Funktionen für Parallelitätsaktualisierungen in Java 9

In diesem Update wird eine neue Klasse, java.util.concurrent.Flow wurde eingeführt, das verschachtelte Schnittstellen hat, die die Implementierung eines Publish-Subscribe-Frameworks unterstützen. Mit dem Publish-Subscribe-Framework können Entwickler Komponenten erstellen, die einen Live-Datenstrom asynchron nutzen können, indem sie Publisher einrichten, die die Daten produzieren, und Abonnenten, die die Daten über ein Abonnement verbrauchen, die sie verwalten. Die vier neuen Schnittstellen lauten wie folgt:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (der sowohl als Publisher als auch als Subscriber fungiert).

Projekt Puzzle in Java 9

Das Hauptziel dieses Projekts ist die Einführung des Konzepts von Modularität Unterstützung um Module in Java 9 zu erstellen und diese dann auf die anzuwenden JDK das ist, JDK modularisieren .

Einige der Leistungen von Modularität sind wie folgt:

pmi-acp lohnt sich
  • Starke Einkapselung : Die Module können nur auf die Teile des Moduls zugreifen, die zur Verwendung bereitgestellt wurden. Daher sind die öffentlichen Klassen in einem Paket nicht öffentlich, es sei denn, das Paket wird explizit in die Modulinfodatei exportiert.
  • Abhängigkeiten löschen : Module müssen über die require-Klausel angeben, welche anderen Module sie verwenden würden.
  • Kombinieren von Modulen, um eine kleinere Laufzeit zu erstellen, die leicht auf kleinere Computergeräte skaliert werden kann.
  • Zuverlässig : Anwendungen sind durch Eliminieren zuverlässiger Laufzeit Fehler . Beispiel:- Sie müssen festgestellt haben, dass Ihre Anwendung zur Laufzeit aufgrund fehlender Klassen fehlgeschlagen ist ClassNotFoundException .

Es gibt verschiedene JEPs , die Teil dieses Projekts sind, wie folgt:

  • JEP 200 - modulares JDK : Hiermit wird das Java-Plattformmodulsystem angewendet, um das JDK in eine Reihe von Modulen zu modularisieren, die zur Kompilierungszeit, Erstellungszeit oder Laufzeit kombiniert werden können.
  • JEP 201 - Modularer Quellcode : Dies modularisiert den JDK-Quellcode in Module und erweitert die Build-Tools zum Kompilieren der Module.
  • JEP 220 - Modulare Laufzeitbilder : Dadurch werden die JDK- und JRE-Laufzeitabbilder neu strukturiert, um Module aufzunehmen und Leistung, Sicherheit und Wartbarkeit zu verbessern.
  • JEP 260 - Kapselung der meisten internen APIs : Dadurch können viele interne APIs direkt oder über Reflection aufgerufen werden. Der Zugriff auf interne APIs, die sich zwangsläufig ändern, ist sehr riskant. Um ihre Verwendung zu verhindern, werden sie in Module eingekapselt und nur die häufig verwendeten internen APIs werden zur Verfügung gestellt, bis eine geeignete API an ihrer Stelle ist.
  • JEP 261 - Modulsystem : Dadurch wird die Java-Spezifikation des Modulsystems implementiert, indem die Java-Programmiersprache, JVM und andere Standard-APIs geändert werden
  • JEP 282: jlink, der Java-Linker : Dies ermöglicht das Packen von Modulen und deren Abhängigkeiten in kleinere Laufzeiten.

Hier ging es also nur um Java 9 und neue Java 9-Funktionen.

Nachdem Sie die Funktionen von Java 9 verstanden haben, lesen Sie die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt.

G Keine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieses 'Java 9' -Blogs und wir werden uns so schnell wie möglich bei Ihnen melden.