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 dient. Java SE 16 bietet weiterhin Rückwärtskompatibilität zu früheren Versionen der Java-Plattform, sodass alle zuvor geschriebenen Java-Projekte ohne Änderungen unter der neuen Version ausgeführt werden können. Die Installationspakete von Java SE 16 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows und macOS verfügbar. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java 16 ist vollständig unter der GPLv2-Lizenz mit Ausnahmen von GNU ClassPath lizenziert, die dynamisches Verknüpfen mit kommerziellen Produkten erlauben.

Java SE 16 gehört zur Kategorie der Releases mit regulärer Unterstützung, für die Updates bis zur nächsten Version bereitgestellt werden. Für eine Version mit langfristiger Unterstützung (LTS) sollte Java SE 11 verwendet werden, dessen Updates bis 2026 bereitgestellt werden. Der nächste LTS-Release ist für September 2021 geplant. Wir erinnern daran, dass mit dem Release von Java 10 das Projekt auf einen neuen Entwicklungsprozess umgestiegen ist, der einen kürzeren Zyklus für die Erstellung neuer Versionen vorsieht. Neue Funktionen werden jetzt in einem ständig aktualisierten Master-Branch entwickelt, in den bereits fertiggestellte Änderungen integriert werden und von dem alle sechs Monate Branches für die Stabilisierung neuer Releases abgezweigt werden.

Bei der Vorbereitung der neuen Version wurde die Entwicklung von dem Versionsverwaltungssystem Mercurial auf Git und die Plattform für gemeinsame Entwicklung GitHub umgestellt. Die Migration soll die Leistung der Repository-Operationen verbessern, die Effizienz der Speicherung erhöhen, den Zugang zu Änderungen in der gesamten Projektgeschichte gewährleisten, die Unterstützung für Code-Reviews verbessern und die Verwendung von APIs zur Automatisierung von Arbeitsabläufen ermöglichen. Zudem macht die Anwendung von Git und GitHub das Projekt für Neulinge und Entwickler, die an Git gewöhnt sind, attraktiver.

Zu den Neuerungen in Java 16 gehören:

  • Das experimentelle Modul jdk.incubator.vector wurde hinzugefügt, das eine API für Vektorrechnungen implementiert. Diese Funktionen nutzen Vektor-Instruktionen von x86_64- und AArch64-Prozessoren und ermöglichen es, mehrere Werte gleichzeitig zu verarbeiten (SIMD). Im Gegensatz zu den im JIT-Compiler HotSpot angebotenen Möglichkeiten zur automatischen Vektorisierung von Skalaren gestattet die neue API eine explizite Steuerung der Vektorisierung zur parallelen Datenverarbeitung.
  • Im JDK- und VM HotSpot-Code, der in C++ geschrieben ist, dürfen die Möglichkeiten, die in der C++14-Spezifikation eingeführt wurden, verwendet werden. Zuvor war die Verwendung der Standards C++98/03 erlaubt.
  • Der Z Garbage Collector (ZGC) wurde um die Möglichkeit zur parallelen Verarbeitung von Thread-Stacks ohne Unterbrechung der Ausführung der Anwendung erweitert. ZGC arbeitet passiv und minimiert Verzögerungen durch Garbage Collection, sodass jetzt nur noch Arbeiten, die eine Unterbrechung erfordern und in der Regel nicht länger als einige Hundert Mikrosekunden dauern, bestehen bleiben.
  • 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-, Microservices-, Cloud- und eingebetteten Systemomgebungen beliebt ist. Der vorgeschlagene Port ermöglicht die Ausführung von Java-Programmen wie herkömmliche Anwendungen. Darüber hinaus können durch jlink nicht verwendete Module entfernt und eine minimale Umgebung geschaffen werden, die ausreichend ist, um die Anwendung auszuführen, was das Erstellen anwendungsspezifischer kompakten Images erleichtert.
  • Ein Elastic Metaspace-Mechanismus wurde implementiert, der die Speicherzuweisungs- und Rückgabebetriebe für die von den Klassendaten (Metaspace) in der JVM HotSpot belegten Speicher optimiert. Die Anwendung von Elastic Metaspace reduziert die Speichermangel, verringert die Overhead-Kosten im Klassenlader und hat positive Auswirkungen auf die Leistung langfristig laufender Serveranwendungen, indem der nicht verwendete Speicher schneller an das Betriebssystem zurückgegeben wird. Für die Wahl des Freigabemodus nach dem Entladen von Klassen wird die Option „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)“ angeboten.
  • Ein JDK-Port für Windows-Systeme, die auf AArch64-basierten Prozessoren laufen, wurde hinzugefügt.
  • Eine dritte Vorabversion der Foreign-Memory Access API wurde vorgeschlagen, die es Java-Anwendungen ermöglicht, sicher und effizient auf Speicherbereiche außerhalb des Java-H heaps zuzugreifen, indem neue Abstraktionen wie MemorySegment, MemoryAddress und MemoryLayout verwendet werden.
  • Eine experimentelle Foreign Linker API wurde implementiert, die Java den Zugriff auf nativen Code ermöglicht. Zusammen mit der Foreign-Memory API vereinfacht die neue Schnittstelle erheblich die Erstellung von Bindings für herkömmliche gemeinsam genutzte Bibliotheken.
  • Das Tool jpackage wurde hinzugefügt, um Pakete für eigenständige Java-Anwendungen zu erstellen. Das Tool basiert auf dem javapackager aus JavaFX und ermöglicht die Erstellung von Paketen in formate, die für verschiedene Plattformen spezifisch 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.
  • Standardmäßig ist die strenge Kapselung aller internen Elemente des JDK aktiviert, mit Ausnahme kritischer APIs wie sun.misc.Unsafe. Der Wert der Option „—illegal-access“ ist nun standardmäßig auf „deny“ anstelle von „permit“ gesetzt, was dazu führt, dass Zugriffsversuche auf die meisten internen Klassen, Methoden und Felder blockiert werden. Um diese Einschränkung zu umgehen, sollte die Option „—illegal-access=permit“ verwendet werden.
  • Die Implementierung der Musterzuordnung im „instanceof“-Operator wurde stabilisiert, wodurch es möglich ist, eine lokale Variable zur Referenzierung des geprüften Wertes sofort zu definieren. Beispielsweise kann man nun direkt schreiben „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“, ohne dass „String s = (String) obj“ explizit definiert werden muss. Früher: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Jetzt kann es ohne die Definition „Group group = (Group) obj“ auskommen: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Die Implementierung des Schlüsselworts „record“ wurde stabilisiert und bietet eine kompakte Form zur Definition von Klassen, die ohne explizite Definition verschiedener Low-Level-Methoden wie equals(), hashCode() und toString() auskommt, wenn die Daten lediglich in Feldern gespeichert werden, deren Handhabung unverändert bleibt. Wenn in der Klasse die Standardimplementierungen der Methoden equals(), hashCode() und toString() verwendet werden, kann auf eine explizite Definition verzichtet werden: public record BankTransaction(LocalDate date, double amount, String description) {}

    Diese Deklaration führt automatisch zu der Hinzufügung von Implementierungen der Methoden equals(), hashCode() und toString() zusätzlich zum Konstruktor und den Methoden, die die Datenänderungen überwachen (Getter).

  • Es wurde eine zweite vorläufige Version der sealed Klassen und Schnittstellen vorgeschlagen, die von anderen Klassen und Schnittstellen nicht für Vererbung, Erweiterung oder Implementierungsüberschreibung verwendet werden können. Sealed Klassen bieten auch eine deklarativere Möglichkeit, die Nutzung der Superklasse zu beschränken als Zugriffsmodifikatoren, da sie eine explizite Auflistung der zulässigen Unterklassen zur Erweiterung erfordern. 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

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