Einführung in Java 13: Kommen wir zu den neuen Funktionen von JDK



Java war ein Traum für Programmierer und wie lässt sich die Popularität von Java mit der neuen Version Java 13 besser quantifizieren? Nach dem ersten Java-Verbesserungsvorschlag wurden Verbesserungen an den JDK-Funktionen vorgenommen, die den Java-Entwicklern neue Funktionen einbringen werden nach der offiziellen Veröffentlichung am 17. September 2019.

Aber warum ist Java Ihrer Meinung nach so beliebt?

Java war unter Programmierern aufgrund seiner Plattformunabhängigkeit und der Fähigkeit, auf verschiedenen Computern ausgeführt zu werden, ein Hype. Es ist so lange da, dass es von Organisationen wie Banken, Versicherungsunternehmen, Unternehmen, Agenturen und vor allem von Software-Outsourcing-Unternehmen übernommen wurde .

Java war im Geschäft, um Android-Apps, Java-Webanwendungen, Softwaretools und wissenschaftliche Anwendungen zu entwickeln.

Lassen Sie uns in die Statistik eintauchen und den Bekanntheitsgrad von Java-Anwendungen unter anderen konkurrierenden Programmiersprachen messen.

Laut dem jüngsten September-Bericht von Tiobe Index haben Java-Anwendungen und -Programmierer ihre Position unter Beweis gestellt und anderen Programmiersprachen Schwierigkeiten bereitet.



Nachdem wir die Popularität von Java unter den anderen Programmiersprachen gesehen haben, wollen wir auf einen Blick zu den Java 13 JDK-Funktionen übergehen:

  1. JEP 350: Dynamische CDS-Archive
  2. JEP 351: ZGC: Unbenutzten Speicher freigeben
  3. JEP 353: Neuimplementierung der Legacy-Socket-API
  4. JEP 354: Ausdrücke wechseln (Vorschau)
  5. JEP 355: Textblöcke (Vorschau)

Da nach der ersten Veröffentlichung von Java 12 nicht viele Änderungen zu erwarten sind, gibt es immer noch Änderungen auf Funktionsebene, die Java-Programmierer auf neue stabile Funktionen umstellen könnten. Ziel ist es, die Vorschaufunktionen in der nächsten LTS-Version so fertigzustellen, dass sie stabil genug sind und für die nächsten drei Jahre gut aussehen. Es wurde erwartet, dass Java 17 bis September 2021 das Erbe von Java 8 und 11 übernehmen wird.

In diesem Blog werde ich Sie durch die neuesten Funktionen führen, die Sie von Java 13 erwarten können.

-> Dynamische CDS-Archive

Abgesehen von den neuen Funktionen, die für Java-Entwickler offensichtlich sind, ist unter dem Dach von JVM und der Klassenbibliothek viel passiert. Class Data Sharing (CDS) wurde bereits in Java 5 eingeführt. Das ultimative Ziel von CDS besteht darin, die Startzeiten von Java-Anwendungen zu verkürzen, indem bestimmte Informationen zu Klassen in Archiven für Class Data Sharing gespeichert werden. Die Daten können dann zur Laufzeit geladen und von mehreren JVMs verwendet werden.

Bis Java 10 waren die freigegebenen Archive jedoch nur für den Bootstrap ClassLoader zugänglich. Ab Java 10 wurde CDS um Application Class Data Sharing (AppCDS) erweitert. AppCDS ermöglicht dem integrierten System- und Plattformklassenladeprogramm sowie benutzerdefinierten Klassenladeprogrammen den Zugriff auf die CDS-Archive. Zur Erstellung der CDS-Archive sind Klassenlisten erforderlich, um die zu ladenden Klassen zu identifizieren.

Bisher mussten diese Klassenlisten durch Testläufe der Anwendung ermittelt werden, um festzustellen, welche Klassen während der Ausführung tatsächlich geladen wurden. Seit Java 12 werden standardmäßig Standard-CDS-Archive mit dem JDK ausgeliefert, das auf der Klassenliste des JDK basiert.

Darauf bauen nun Dynamic CDS Archives auf. Ziel ist es, die zusätzlichen Testläufe der Anwendung zu speichern. Nach der Ausführung einer Anwendung werden nur die neu geladenen Anwendungs- und Bibliotheksklassen archiviert, die nicht bereits in der Standard- / Basisschicht-CD enthalten sind. Die dynamische Archivierung wird mit Kommandozeilenbefehlen aktiviert. In einer zukünftigen Erweiterung könnte die Archivierung von Klassen dann vollautomatisch und transparent ablaufen.

-> ZGC: Unbenutzten Speicher freigeben

Heutzutage ist es nicht ungewöhnlich, dass die Anwendungen Tausende von Benutzern gleichzeitig bedienen müssen. Solche Anwendungen benötigen viel Speicher und die Speicherverwaltung ist erheblich, was sich auf die Leistung der Anwendung auswirkt. Um die genannten Anforderungen zu erfüllen, hat Oracle in Java 11 den Z Garbage Collector ( ZGC ) eingeführt, der sehr kurze Pausen bei der Bereinigung von Heap-Speichern mit mehreren Terabyte verspricht.

Bisher wurde der für Anwendungen reservierte Heap-Speicher nicht freigegeben. Infolgedessen verbrauchen Anwendungen viel mehr Speicher als erforderlich. Eine Anwendung, die in Umgebungen mit geringen Ressourcen ausgeführt wird, ist besonders betroffen. Andere Garbage Collectors wie der G1 und Shenandoah unterstützen bereits die Freigabe von ungenutztem Speicher.

-> Erneuerte Socket-APIs

Die Java Socket- und Java ServerSocketAPIs sind Fragmente aus dem JDK 1.0. Die meisten von ihnen bestehen aus Java und C-Code. Dies erschwert die Wartung und Erweiterbarkeit erheblich. Das NioSocketImpl soll jetzt das veraltete PlainSocketImpl ersetzen. NioSocketImpl basiert bereits auf der vorhandenen New I / O-Implementierung und nutzt die vorhandene Infrastruktur im JDK.

Die vorherige Implementierung ist nicht mit anderen geplanten Erweiterungen der Sprache kompatibel. Beispielsweise behindern Parallelitätsprobleme die zukünftige Verwendung der Lightweight-Benutzer-Threads (Glasfaser, Teil des Project Loom).

-> Verbesserungen für Switch-Ausdrücke

Wenn Sie das Feature aus der Sicht des Entwicklers betrachten, ist es nur der Punkt, der interessant ist. Beispielsweise wurde der Switch Expressions als Vorschau in Java 12 eingeführt und aufgrund von Benutzerfeedbacks erweitert. Die Switch-Ausdrücke sind eine Alternative zu den umständlichen und fehleranfälligen Switch-Anweisungen.

Die größte Änderung bei den Codierungsnormen, die in Java 13 zu sehen war, war die Ersetzung des Schlüsselwortumbruchs im Schalterausdruck durch Yield. Der Hintergrund ist die bessere Unterscheidung zwischen einer switch-Anweisung (mit möglichem Umbruch) und Ausdrücken (mit Ertrag). Die yield-Anweisung verlässt den Schalter und gibt das Ergebnis der aktuellen Verzweigung zurück, ähnlich einer Rückgabe.

Das folgende Codefragment zeigt beispielsweise das Szenario, in dem die Anweisung von Switch mit break verwendet wurde und in dem anderen Teil Switch Expression mit dem Ertrag verwendet wurde, um die Differenz zwischen den beiden zu ermitteln.



-> Textblöcke anstelle von unformatierten String-Literalen

Textblock ist eine neue Art, Zeichenkettenliteral in der Java-Sprache zu definieren. Es kann verwendet werden, um eine Zeichenfolge überall dort zu bezeichnen, wo ein Zeichenfolgenliteral verwendet werden kann, bietet jedoch eine größere Ausdruckskraft und weniger zufällige Komplexität. Die erste Implementierung von Raw-String-Literalen hat viele Fragen aufgeworfen, da Benutzer Feedback zu derselben gegeben haben, die mehrere Fragen enthält.

Schließlich können viele Java-Anwendungen Codeausschnitte aus anderen Sprachen wie HTML oder SQL verarbeiten. Bisher konnten solche Zeichenfolgen nur umständlich definiert werden, was ihre Lesbarkeit erschwert.

Beispielsweise müssen zusätzliche Steuerbefehle (mit \ n) für Zeilenumbrüche verwendet werden. Andere Sprachen wie Groovy, Scala oder Kotlin bieten seit langem die Möglichkeit, mehrzeilige Texte zu definieren.

Der neue Textblock verwendet dreifache Anführungszeichen als Begrenzer und kann überall dort verwendet werden, wo normale Zeichenfolgen zulässig sind.

Das folgende Code-Snippet erklärt den Unterschied zwischen den beiden:



Die öffnenden und schließenden dreifachen Anführungszeichen müssen in einer separaten Zeile stehen. Trotzdem beginnt der eigentliche Inhalt mit der zweiten Zeile. Dies erhöht die Lesbarkeit des Quellcodes, da der Einzug der ersten Zeile im Quelltext korrekt dargestellt wird.

Fazit:

Die bisher beschriebenen Änderungen wurden in den JEPs (Java Enhancement Protocols) definiert. Es gibt jedoch weitere Anpassungen direkt in der Klassenbibliothek. Aber zuerst müssen Sie Java 13 installieren, während sich die Java 14-Version noch in der Pipeline befindet.

Die Änderungen sind unsicher und es gab bestimmte Funktionen wie Schalterausdrücke und Textblock, die finalisiert werden können. Die nächste Version ist jedoch auf dem Weg.

Source: https://habr.com/ru/post/de483186/


All Articles