Veröffentlichung von Java SE 17

Nach sechs Monaten Entwicklung hat Oracle die Plattform Java SE 17 (Java Platform, Standard Edition 17) veröffentlicht, wobei das OpenJDK-Projekt als Referenzimplementierung dient. Abgesehen von der Entfernung einiger veralteter Funktionen bietet Java SE 17 volle Rückwärtskompatibilität zu früheren Versionen der Java-Plattform — die Mehrheit der zuvor geschriebenen Java-Projekte wird ohne Änderungen unter der neuen Version lauffähig sein. Fertige Installationspakete für Java SE 17 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows (x86_64) und macOS (x86_64, AArch64) verfügbar. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java 17 ist vollständig unter der GPLv2-Lizenz mit Ausnahmen für GNU ClassPath offen, die dynamisches Linking mit kommerziellen Produkten erlauben.

Java SE 17 gehört zur Kategorie der Versionen mit Langzeitunterstützung (LTS), für die Updates bis 2029 veröffentlicht werden. Die Aktualisierungen für die vorherige Zwischenversion Java 16 wurden eingestellt. Der vorherige LTS-Zweig Java 11 wird bis 2026 unterstützt. Die nächste LTS-Version ist für September 2024 geplant. Wir erinnern daran, dass mit der Veröffentlichung von Java 10 das Projekt auf einen neuen Entwicklungsprozess umgestiegen ist, der einen kürzeren Zyklus für die Erstellung neuer Versionen umfasst. Neue Funktionen werden nun in einem ständig aktualisierten Master-Zweig entwickelt, in den fertige Änderungen integriert werden, und von dem alle sechs Monate Stabilitätszweige für neue Versionen abgezweigt werden.

Zu den Neuerungen in Java 17 gehören:

  • Eine experimentelle Implementierung der Musterabgleichung in „switch“-Ausdrücken wurde vorgeschlagen, die es ermöglicht, in den „case“-Labels keine genauen Werte, sondern flexible Muster zu verwenden, die eine Reihe von Werten abdecken, für die zuvor umständliche „if…else“-Ketten verwendet werden mussten. Darüber hinaus wurde innerhalb von „switch“ die Möglichkeit zur Verarbeitung von NULL-Werten implementiert. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Die Unterstützung für versiegelte („sealed“) Klassen und Interfaces, die von anderen Klassen und Interfaces nicht zur Vererbung, Erweiterung oder Überschreibung der Implementierung verwendet werden können, wurde stabilisiert. Versiegelte Klassen bieten auch eine deklarativere Möglichkeit, die Verwendung von Superklassen einzuschränken, als Zugriffsmodifikatoren, die auf einer expliziten Aufzählung der erlaubten Unterklassen basieren. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Die zweite vorläufige Implementierung der Vector-API wurde vorgestellt, die Funktionen für Vektorverarbeitung bereitstellt. Diese werden unter Verwendung von Vektor-Befehlen der x86_64- und AArch64-Prozessoren ausgeführt und ermöglichen die gleichzeitige Anwendung von Operationen auf mehrere Werte (SIMD). Im Gegensatz zu den Auto-Vektorisierungsfunktionen für skalare Operationen, die im JIT-Compiler HotSpot bereitgestellt werden, ermöglicht die neue API eine explizite Steuerung der Vektorisierung zur parallelen Datenverarbeitung.
  • Die vorläufige Implementierung der API für Fremdfunktionen & Speicher wurde hinzugefügt. Mit dieser können Anwendungen mit Code und Daten interagieren, die außerhalb der Java-Laufzeit liegen. Die neue API ermöglicht es, Funktionen, die nicht in der JVM ausgeführt werden, effizient aufzurufen und auf nicht von der JVM verwalteten Speicher zuzugreifen. So können beispielsweise Funktionen aus externen Shared Libraries aufgerufen und Daten von Prozessen ohne Verwendung von JNI abgerufen werden.
  • Eine Rendering-Engine für macOS, die die Java 2D-API unterstützt, welche wiederum in der Swing-API verwendet wird, wurde für die Nutzung der Grafik-API Metal angepasst. Standardmäßig wird auf der Plattform macOS weiterhin OpenGL verwendet. Um die Unterstützung für Metal zu aktivieren, ist das Setzen der Option „-Dsun.java2d.metal=true“ erforderlich, und es muss mindestens die Version macOS 10.14.x installiert sein.
  • Ein Port für die Plattform macOS/AArch64 (Apple-Computer mit den neuen Apple M1-Chips) wurde hinzugefügt. Besonderheit dieses Ports ist die Unterstützung des W^X-Speicherschutzmechanismus (Write XOR Execute), bei dem Speicherseiten nicht gleichzeitig zum Schreiben und Ausführen zugänglich sein können. (Code kann nur nach Verhinderung von Schreibzugriff ausgeführt werden, und das Schreiben in eine Speicherseite ist nur nach Verhinderung der Ausführung möglich).
  • Die Verwendung der strikten (strictfp) Semantik für Gleitkomma-Ausdrücke wurde wiederhergestellt. Die Unterstützung für die ab Version Java 1.2 verfügbare „default“-Semantik, die Vereinfachungen für den Betrieb auf Systemen mit sehr alten mathematischen Coprozessoren x87 beinhaltete, wurde eingestellt (nach der Einführung von SSE2-Anweisungen war die Notwendigkeit für diese zusätzliche Semantik verschwunden).
  • Es wurden neue Schnittstellentypen für Pseudorandomzahlengeneratoren implementiert sowie zusätzliche Algorithmen für eine qualitativ hochwertigere Zufallszahlengenerierung realisiert. Anwendungen haben nun die Möglichkeit, den Algorithmus zur Generierung von Pseudorandomzahlen auszuwählen. Zudem wurde die Unterstützung für die Generierung von Strömen zufälliger Objekte verbessert.
  • Es wurde eine zwingende strikte Kapselung aller internen Elemente des JDK implementiert, mit Ausnahme kritischer APIs wie sun.misc.Unsafe. Die strikte Kapselung blockiert Versuche, aus dem Code auf interne Klassen, Methoden und Felder zuzugreifen. Zuvor konnte der Modus der strikten Kapselung über die Option „—illegal-access=permit“ deaktiviert werden, diese ist jetzt als veraltet markiert. Anwendungen, die Zugriff auf interne Klassen, Methoden und Felder benötigen, sollten diese ausdrücklich mit Hilfe der Option „—add-opens“ oder des Attributes Add-Opens in der Manifestdatei definieren.
  • Anwendungen haben die Möglichkeit, Filter für die Deserialisierung von Daten zu definieren, die kontextabhängig sind und dynamisch in Verbindung mit bestimmten Deserialisierungsoperationen ausgewählt werden können. Die festgelegten Filter sind auf das gesamte Objekt anwendbar. virtuellen Maschine (JVM-weit), d.h. sie umfassen nicht nur die Anwendung selbst, sondern auch die in der Anwendung verwendeten externen Bibliotheken.
  • In Swing wurde die Methode javax.swing.filechooser.FileSystemView.getSystemIcon hinzugefügt, um große Icons zu laden, was die Gestaltung der Benutzeroberfläche auf Bildschirmen mit hoher Pixeldichte (HighDPI) verbessert.
  • Die API java.net.DatagramSocket unterstützt jetzt die Verbindung zu Multicast-Gruppen, ohne dass eine separate API java.net.MulticastSocket verwendet werden muss.
  • Das Tool IGV (Ideal Graph Visualizer) wurde verbessert, um eine interaktive Visualisierung des Zwischencodes im JIT-Compiler HotSpot VM C2 zu ermöglichen.
  • In der JavaDoc wird nun analog zum Compiler javac bei der Fehlerausgabe die problematische Zeilennummer in der Quelldatei und der Fehlerort angegeben.
  • Das Attribut native.encoding wurde hinzugefügt, das den Namen der Systemzeichencodierung (UTF-8, koi8-r, cp1251 usw.) widerspiegelt.
  • Das Interface java.time.InstantSource wurde hinzugefügt, um die Zeit unabhängig von der Zeitzone zu manipulieren.
  • Die API java.util.HexFormat wurde hinzugefügt, um die Konvertierung in und aus der hexadezimalen Darstellung zu ermöglichen.
  • Der Compiler hat einen Blackhole-Modus hinzugefügt, der die Ausführung von nicht verwendetem Code (dead-code elimination) deaktiviert. Dies kann bei Leistungstests verwendet werden.
  • Im Runtime wurde die Option «-Xlog:async» hinzugefügt, um Logs asynchron zu schreiben.
  • Bei der Einrichtung von gesicherten Verbindungen wird standardmäßig TLS 1.3 verwendet (zuvor wurde TLS 1.2 genutzt).
  • Das zuvor als veraltet erklärte API Applet (java.applet.Applet*, javax.swing.JApplet), das zum Starten von Java-Anwendungen im Browser verwendet wurde, wurde in die Kategorie der zur Entfernung vorgemerkten APIs verschoben (nachdem die Unterstützung für das Java-Plugin in Browsern eingestellt wurde, ist es nicht mehr relevant).
  • Der Security Manager, der seit langem obsolet ist und nach der Einstellung der Unterstützung für Browser-Plugins nicht mehr benötigt wird, wurde in die Kategorie der zur Entfernung vorgemerkten Komponenten verschoben.
  • Der RMI Activation-Mechanismus, der veraltet ist, wurde bereits in Java 8 in den Status einer Option überführt und findet in der modernen Praxis kaum noch Anwendung.
  • Der experimentelle Compiler, der JIT (just-in-time) für die dynamische Kompilierung von Java-Code für die HotSpot JVM unterstützt, sowie den AOT (ahead-of-time) Modus für die Kompilierung von Klassen in Maschinencode vor dem Start der virtuellen Maschine, wurde aus dem SDK entfernt. Der Compiler wurde in Java geschrieben und basiert auf den Entwicklungen des Graal-Projekts. Es wird angemerkt, dass die Wartung des Compilers einen hohen Aufwand erfordert, der sich unter den Umständen der geringen Nachfrage bei Entwicklern nicht rechtfertigt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster