Java SE 16-Veröffentlichung

Nach sechs Monaten Entwicklungszeit veröffentlichte Oracle Java SE 16 (Java Platform, Standard Edition 16), das das OpenJDK-Projekt als Referenzimplementierung verwendet. Java SE 16 behält die Abwärtskompatibilität mit früheren Versionen der Java-Plattform bei; alle zuvor geschriebenen Java-Projekte funktionieren ohne Änderungen, wenn sie unter der neuen Version gestartet werden. Installationsfertige Builds von Java SE 16 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows und macOS vorbereitet. Die vom OpenJDK-Projekt entwickelte Java 16-Referenzimplementierung ist vollständig Open Source unter der GPLv2-Lizenz, wobei GNU ClassPath-Ausnahmen eine dynamische Verknüpfung mit kommerziellen Produkten ermöglichen.

Java SE 16 wird als allgemeine Support-Version eingestuft und wird bis zur nächsten Version weiterhin Updates erhalten. Der Long Term Support (LTS)-Zweig soll Java SE 11 sein, das bis 2026 weiterhin Updates erhält. Die nächste LTS-Veröffentlichung ist für September 2021 geplant. Wir möchten Sie daran erinnern, dass das Projekt mit der Veröffentlichung von Java 10 auf einen neuen Entwicklungsprozess umgestellt hat, was einen kürzeren Zyklus für die Erstellung neuer Releases bedeutet. Neue Funktionen werden nun in einem ständig aktualisierten Hauptzweig entwickelt, der vorgefertigte Änderungen enthält und von dem alle sechs Monate Zweige abgezweigt werden, um neue Versionen zu stabilisieren.

In Vorbereitung auf die neue Version wurde die Entwicklung vom Versionskontrollsystem Mercurial auf Git und die kollaborative Entwicklungsplattform GitHub verlagert. Es wird erwartet, dass die Migration die Leistung von Repository-Vorgängen verbessert, die Speichereffizienz erhöht, Zugriff auf Änderungen im gesamten Projektverlauf ermöglicht, die Unterstützung für die Codeüberprüfung verbessert und APIs zur Automatisierung von Arbeitsabläufen ermöglicht. Darüber hinaus macht die Verwendung von Git und GitHub das Projekt für Einsteiger und Entwickler, die mit Git vertraut sind, attraktiver.

Zu den neuen Funktionen in Java 16 gehören:

  • Experimentelles Modul jdk.incubator.vector mit einer Implementierung der Vector API hinzugefügt, die Funktionen für Vektorberechnungen bereitstellt, die mithilfe von Vektoranweisungen auf x86_64- und AArch64-Prozessoren durchgeführt werden und die gleichzeitige Anwendung von Operationen auf mehrere Werte (SIMD) ermöglichen. Im Gegensatz zu den Funktionen des HotSpot-JIT-Compilers zur automatischen Vektorisierung skalarer Operationen können Sie mit der neuen API die Vektorisierung für die parallele Datenverarbeitung explizit steuern.
  • In C++ geschriebener JDK- und VM-HotSpot-Code darf Funktionen verwenden, die in der C++14-Spezifikation eingeführt wurden. Zuvor waren C++98/03-Standards zulässig.
  • Der ZGC (Z Garbage Collector), der im passiven Modus arbeitet und Verzögerungen aufgrund der Garbage Collection so weit wie möglich minimiert, hat die Möglichkeit hinzugefügt, Thread-Stacks parallel zu verarbeiten, ohne Anwendungs-Threads anzuhalten. Das ZGC verfügt jetzt nur noch über Arbeiten, die eine Unterbrechung erfordern und konstante Verzögerungen aufweisen, die normalerweise einige hundert Mikrosekunden nicht überschreiten.
  • Unterstützung für Unix-Sockets (AF_UNIX) zu den Klassen SocketChannel, ServerSocketChannel und java.nio.channels hinzugefügt.
  • Für die Linux-Distribution Alpine wurde eine Portierung mit der Standard-C-Bibliothek musl implementiert, die in Umgebungen für Container, Microservices, Cloud- und Embedded-Systeme beliebt ist. Der vorgeschlagene Port in solchen Umgebungen ermöglicht es Ihnen, Java-Programme wie normale Anwendungen auszuführen. Darüber hinaus können Sie mit jlink alle nicht verwendeten Module entfernen und eine minimale Umgebung erstellen, die zum Ausführen der Anwendung ausreicht, sodass Sie anwendungsspezifische Kompaktbilder erstellen können.
  • Der Elastic Metaspace-Mechanismus wurde implementiert und optimiert die Vorgänge der Zuweisung und Rückgabe von durch Klassenmetadaten (Metaspace) belegtem Speicher in JVM HotSpot. Die Verwendung von Elastic Metaspace reduziert die Speicherfragmentierung, reduziert den Overhead des Klassenladers und wirkt sich auch positiv auf die Leistung lang laufender Serveranwendungen aus, da der von ungenutzten Klassenmetadaten belegte Speicher schneller an das Betriebssystem zurückgegeben wird. Um den Speicherfreigabemodus nach dem Entladen von Klassen auszuwählen, wird die Option „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)“ angeboten.
  • Für Windows-Systeme, die auf Hardware mit Prozessoren laufen, die auf der AArch64-Architektur basieren, wurde ein JDK-Port hinzugefügt.
  • Es wurde eine dritte Vorschau der Foreign-Memory Access API vorgeschlagen, die es Java-Anwendungen ermöglicht, durch Manipulation der neuen Abstraktionen MemorySegment, MemoryAddress und MemoryLayout sicher und effizient auf Speicherbereiche außerhalb des Java-Heaps zuzugreifen.
  • Es wurde eine experimentelle Foreign Linker API implementiert, die den Zugriff von Java auf nativen Code ermöglicht. Zusammen mit der Foreign-Memory-API erleichtert die neue Programmierschnittstelle die Erstellung von Wrappern gegenüber herkömmlichen gemeinsam genutzten Bibliotheken erheblich.
  • Das Dienstprogramm jpackage wurde hinzugefügt, mit dem Sie Pakete für eigenständige Java-Anwendungen erstellen können. Das Dienstprogramm basiert auf dem Javapackager von JavaFX und ermöglicht die Erstellung von Paketen in nativen Formaten für verschiedene Plattformen (msi und exe für Windows, pkg und dmg für macOS, deb und rpm für Linux). Die Pakete enthalten alle erforderlichen Abhängigkeiten.
  • Die strikte Kapselung aller JDK-Interna ist standardmäßig aktiviert, mit Ausnahme kritischer APIs wie sun.misc.Unsafe. Der Wert der Option „--illegal-access“ ist jetzt standardmäßig auf „deny“ statt auf „permit“ gesetzt, wodurch Versuche des Codes blockiert werden, auf die meisten internen Klassen, Methoden und Felder zuzugreifen. Um die Einschränkung zu umgehen, verwenden Sie die Option „-illegal-access=permit“.
  • Die Implementierung des Mustervergleichs im „instanceof“-Operator wurde stabilisiert, sodass Sie sofort eine lokale Variable definieren können, die auf den überprüften Wert verweist. Sie können beispielsweise sofort „if (obj Instanz von String s && s.length() > 5) {.. s.contains(..) ..}“ schreiben, ohne explizit „String s = (String) obj“ zu definieren. War: if (obj exampleof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Jetzt können Sie auf die Definition von „Group group = (Group) obj“ verzichten: if (obj Instanzof Group Group) { var Einträge = Group.getEntries(); }
  • Die Implementierung des Schlüsselworts „record“ wurde stabilisiert und bietet eine kompakte Form für Klassendefinitionen, die die explizite Definition verschiedener Low-Level-Methoden wie equal(), hashCode() und toString() in Fällen, in denen Daten gespeichert werden, überflüssig macht nur in Feldern. mit denen es sich nicht ändert. Wenn eine Klasse Standardimplementierungen der Methoden equal(), hashCode() und toString() verwendet, kann sie auf deren explizite Definition verzichten: public record BankTransaction(LocalDate date, double amount, String description) {}

    Diese Deklaration fügt zusätzlich zu den Konstruktor- und Getter-Methoden automatisch Implementierungen der Methoden equal(), hashCode() und toString() hinzu.

  • Ein zweiter Entwurf wird für versiegelte Klassen und Schnittstellen vorgeschlagen, die nicht von anderen Klassen und Schnittstellen zum Erben, Erweitern oder Überschreiben von Implementierungen verwendet werden können. Versiegelte Klassen bieten auch eine deklarativere Möglichkeit, die Verwendung einer Oberklasse einzuschränken als Zugriffsmodifikatoren, basierend auf der expliziten Auflistung der zur Erweiterung zugelassenen Unterklassen. Paket com.example.geometry; öffentliche versiegelte Klasse Form erlaubt com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Source: opennet.ru

Kommentar hinzufügen