Java SE 16 veröffentlicht

Nach sechs Monaten Entwicklung hat Oracle die Plattform Java SE 16 (Java Platform, Standard Edition 16) veröffentlicht, wobei das OpenJDK-Projekt als Referenzimplementierung verwendet wird. Java SE 16 bewahrt die AbwĂ€rtskompatibilitĂ€t zu frĂŒheren Versionen der Java-Plattform, alle zuvor geschriebenen Java-Projekte werden ohne Änderungen unter der neuen Version funktionsfĂ€hig sein. Installierbare Bereitstellungen von Java SE 16 (JDK, JRE und Server JRE) sind fĂŒr Linux (x86_64, AArch64), Windows und macOS vorbereitet. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java 16 ist vollstĂ€ndig unter der GPLv2 mit Ausnahmen der GNU ClassPath lizenziert, die dynamisches Binden an kommerzielle Produkte zulassen.

Java SE 16 gehört zur Kategorie der Veröffentlichungen mit allgemeiner UnterstĂŒtzung, Updates dafĂŒr werden bis zur nĂ€chsten Veröffentlichung bereitgestellt. FĂŒr eine Langzeit-Support-Version (LTS) sollte Java SE 11 verwendet werden, fĂŒr die Updates bis 2026 bereitgestellt werden. Die nĂ€chste LTS-Version ist fĂŒr September 2021 geplant. Es sei daran erinnert, dass mit der Veröffentlichung von Java 10 das Projekt auf einen neuen Entwicklungsprozess umgestiegen ist, der kĂŒrzere Zyklen fĂŒr neue Releases vorsieht. Neue Funktionen werden nun in einem stĂ€ndig aktualisierten Master-Zweig entwickelt, in den bereits fertige Änderungen aufgenommen werden und von dem alle sechs Monate Zweige zur Stabilisierung neuer Versionen abgezweigt werden.

Im Rahmen der Vorbereitung einer neuen Version wurde die Entwicklung von Mercurial auf Git und die Plattform GitHub umgestellt. Es wird erwartet, dass die Migration die Leistung der Repository-Operationen verbessert, die Effizienz der Speicherung erhöht, den Zugriff auf Änderungen ĂŒber die gesamte Projektgeschichte ermöglicht, die UnterstĂŒtzung fĂŒr Code-Reviews verbessert und APIs zur Automatisierung von ArbeitsablĂ€ufen aktiviert. DarĂŒber hinaus macht der Einsatz von Git und GitHub das Projekt fĂŒr Neueinsteiger und Entwickler, die mit Git vertraut sind, attraktiver.

Zu den Neuerungen von Java 16 gehören:

  • Ein experimentelles Modul jdk.incubator.vector wurde hinzugefĂŒgt, das die Vector-API implementiert und Funktionen fĂŒr Vektoroperationen bereitstellt, die mit Vektor-Instruktionen der Prozessoren x86_64 und AArch64 durchgefĂŒhrt werden, wodurch gleichzeitig Operationen auf mehreren Werten (SIMD) angewendet werden können. Im Gegensatz zu den im HotSpot JIT-Compiler verfĂŒgbaren Möglichkeiten zur Autovektorierung skalaren Operationen ermöglicht die neue API eine explizite Steuerung der Vektorierung fĂŒr die parallele Verarbeitung von Daten.
  • Im JDK- und VM HotSpot-Code, der in C++ geschrieben ist, wurde die Verwendung der in der C++14-Spezifikation neu hinzugekommenen Features erlaubt. Zuvor war die Verwendung der Standards C++98/03 gestattet.
  • Im Z Garbage Collector (ZGC), der im passiven Modus arbeitet und Verzögerungen durch die MĂŒllsammlung so weit wie möglich minimiert, wurde die Möglichkeit zur parallelen Verarbeitung von Thread-Stacks ohne Unterbrechung der AusfĂŒhrung von Anwendungs-Threads hinzugefĂŒgt. Im ZGC verbleiben nun nur noch die erforderlichen Unterbrechungen, die konstante Verzögerungen aufweisen, die normalerweise wenige Hundert Mikrosekunden nicht ĂŒberschreiten.
  • Die Klassen SocketChannel, ServerSocketChannel und java.nio.channels unterstĂŒtzen jetzt Unix-Sockets (AF_UNIX).
  • Ein Port fĂŒr die Linux-Distribution Alpine mit der standardmĂ€ĂŸigen C-Bibliothek musl wurde implementiert, der in Container-Umgebungen, Mikroservices, Cloud- und eingebetteten Systemen beliebt ist. Der vorgeschlagene Port ermöglicht das AusfĂŒhren von Java-Anwendungen wie herkömmliche Programme in solchen Umgebungen. Außerdem können mit jlink alle ungenutzten Module entfernt und eine minimale Umgebung erstellt werden, die fĂŒr die AusfĂŒhrung der Anwendung ausreichend ist, was die Erstellung anwendungsspezifischer kompakter Images ermöglicht.
  • Ein Mechanismus fĂŒr Elastic Metaspace wurde implementiert, der die Speicherzuweisungs- und RĂŒckgabeoperationen fĂŒr die von Klassenmetadaten (Metaspace) belegte Speicher in der JVM HotSpot optimiert. Die Anwendung von Elastic Metaspace reduziert die Speicherfragmentierung, senkt die Overhead-Kosten im Klassenlader und hat zudem positive Auswirkungen auf die Leistung von lang laufenden Serveranwendungen, da der Speicher, der von ungenutzten Klassenmetadaten belegt wird, schneller an das Betriebssystem zurĂŒckgegeben wird. Um den Freigabemodus nach dem Entladen von Klassen auszuwĂ€hlen, wurde die Option „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)“ vorgeschlagen.
  • Ein JDK-Port fĂŒr Windows-Systeme, die auf AArch64-Prozessorarchitektur basieren, wurde hinzugefĂŒgt.
  • Eine dritte Vorabversion der API Foreign-Memory Access wurde vorgeschlagen, die es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherbereiche außerhalb des Java-Hauptspeichers zuzugreifen, indem neue Abstraktionen wie MemorySegment, MemoryAddress und MemoryLayout verwendet werden.
  • Eine experimentelle API Foreign Linker wurde implementiert, die den Zugriff auf nativen Code aus Java ermöglicht. Zusammen mit der API Foreign-Memory erleichtert die neue Programmierschnittstelle erheblich die Erstellung von Wrappers fĂŒr herkömmliche gemeinsam genutzte Bibliotheken.
  • Das Dienstprogramm jpackage wurde hinzugefĂŒgt, das es ermöglicht, Pakete fĂŒr selbststĂ€ndige (self-contained) Java-Anwendungen zu erstellen. Das Dienstprogramm basiert auf javapackager aus JavaFX und ermöglicht die Erstellung von Paketen in Formaten, die fĂŒr verschiedene Plattformen typisch sind (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.
  • Strikte Kapselung aller internen Elemente des JDK ist jetzt standardmĂ€ĂŸig aktiviert, mit Ausnahme kritischer APIs wie sun.misc.Unsafe. Der Wert der Option „—illegal-access“ ist jetzt standardmĂ€ĂŸig auf „deny“ gesetzt, anstatt auf „permit“, was dazu fĂŒhrt, dass Zugriffsversuche aus dem Code auf die meisten internen Klassen, Methoden und Felder blockiert werden. Zur Umgehung dieser EinschrĂ€nkung sollte die Option „—illegal-access=permit“ verwendet werden.
  • Die Implementierung des Musters in der „instanceof“-Anweisung wurde stabilisiert, die es ermöglicht, sofort eine lokale Variable fĂŒr den Zugriff auf den geprĂŒften Wert zu definieren. Zum Beispiel kann jetzt direkt „if (obj instanceof String s && s.length() > 5) {... s.contains(..) ...}“ geschrieben werden, ohne dass „String s = (String) obj“ explizit definiert werden muss. Vorher: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Jetzt kann auf die Definition „Group group = (Group) obj“ verzichtet werden: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Die Implementierung des SchlĂŒsselworts „record“, das eine kompakte Form zur Definition von Klassen bietet, wurde stabilisiert und ermöglicht es, auf eine explizite Definition verschiedener niedrigstufiger Methoden wie equals(), hashCode() und toString() zu verzichten, wenn die Daten nur in Feldern gespeichert werden, deren Verhaltensweise sich nicht Ă€ndert. Wenn eine Klassen die Standardimplementierungen von equals(), hashCode() und toString() verwendet, kann auf deren explizite Definition verzichtet werden: public record BankTransaction(LocalDate date, double amount, String description) {}

    Diese AnkĂŒndigung fĂŒhrt automatisch zur Implementierung der Methoden equals(), hashCode() und toString() zusĂ€tzlich zum Konstruktor und den Methoden, die die DatenĂ€nderung steuern (Getter).

  • Ein zweiter vorlĂ€ufiger Entwurf von Versiegelten ("sealed") Klassen und Schnittstellen wurde vorgeschlagen, die von anderen Klassen und Schnittstellen nicht zum Erben, Erweitern oder Überschreiben von Implementierungen verwendet werden können. Versiegelte Klassen bieten auch eine deklarative Möglichkeit, die Verwendung der Überklasse einzuschrĂ€nken, die ĂŒber Zugriffsmodifikatoren hinausgeht, indem sie explizit Subklassen auflisten, die fĂŒr die Erweiterung zulĂ€ssig sind. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {
}

Quelle: opennet.ru

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster