Java SE 20-Veröffentlichung

Nach sechs Monaten Entwicklungszeit hat Oracle die Plattform Java SE 20 (Java Platform, Standard Edition 20) veröffentlicht, die das Open-Source-Projekt OpenJDK als Referenzimplementierung verwendet. Mit Ausnahme der Entfernung einiger veralteter Funktionen behält Java SE 20 die Abwärtskompatibilität mit früheren Versionen der Java-Plattform bei – die meisten zuvor geschriebenen Java-Projekte funktionieren weiterhin ohne Änderungen, wenn sie unter der neuen Version ausgeführt werden. Installierbare Builds von Java SE 20 (JDK, JRE und Server JRE) sind für Linux (x86_64, AArch64), Windows (x86_64) und macOS (x86_64, AArch64) vorbereitet. Die vom OpenJDK-Projekt entwickelte Java 20-Referenzimplementierung ist vollständig Open Source unter der GPLv2-Lizenz mit GNU ClassPath-Ausnahmen, um eine dynamische Verknüpfung mit kommerziellen Produkten zu ermöglichen.

Java SE 20 wird als reguläres Support-Release kategorisiert, wobei Updates vor dem nächsten Release veröffentlicht werden. Der Long Term Support (LTS)-Zweig soll Java SE 17 sein, das bis 2029 Updates erhält. Denken Sie daran, dass das Projekt ab der Veröffentlichung von Java 10 auf einen neuen Entwicklungsprozess umgestellt hat, was einen kürzeren Zyklus für die Erstellung neuer Releases impliziert. Neue Funktionalitäten werden nun in einem ständig aktualisierten Master-Branch entwickelt, der bereits durchgeführte Änderungen einbezieht und von dem aus alle sechs Monate Branchs verzweigt werden, um neue Releases zu stabilisieren.

Zu den neuen Funktionen in Java 20 gehören:

  • Es gibt vorläufige Unterstützung für Scoped Values, wodurch unveränderliche Daten über Threads hinweg gemeinsam genutzt und Daten effizient zwischen untergeordneten Threads ausgetauscht werden können (Werte werden vererbt). Bereichswerte werden entwickelt, um den Thread-lokalen Variablenmechanismus zu ersetzen und sind effizienter, wenn eine sehr große Anzahl virtueller Threads (Tausende oder Millionen Threads) verwendet wird. Der Hauptunterschied zwischen Scoped Values ​​und Thread-lokalen Variablen besteht darin, dass erstere einmal geschrieben werden, in Zukunft nicht mehr geändert werden können und nur für die Dauer der Thread-Ausführung verfügbar bleiben. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void dienen(Anforderungsanforderung, Antwortantwort) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = neuer Benutzer (Ebene); ScopedValue.where(CURRENT_USER, user).run(() -> Application.handle(request, Response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(...); } }
  • Es wurde eine zweite Vorschau von Datensatzmustern hinzugefügt, die die in Java 16 eingeführte Mustervergleichsfunktion erweitert, um die Werte von Datensatzklassen zu analysieren. Zum Beispiel: record Point(int x, int y) {} static void printSum(Object obj) { if (obj exampleof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Eine vierte vorläufige Implementierung des Mustervergleichs in „Switch“-Anweisungen wurde hinzugefügt, die es „Case“-Bezeichnungen ermöglicht, keine exakten Werte, sondern flexible Muster zu verwenden, die eine Reihe von Werten gleichzeitig abdecken, für die zuvor eine umständliche Verwendung erforderlich war Ketten von „if...else“-Ausdrücken. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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); Standard -> o.toString(); }; }
  • Es wurde eine zweite vorläufige Implementierung der FFM-API (Foreign Function & Memory) hinzugefügt, mit der Sie die Interaktion von Java-Programmen mit externem Code und Daten organisieren können, indem Sie Funktionen aus externen Bibliotheken aufrufen und auf Speicher außerhalb der JVM zugreifen.
  • Es wurde eine zweite Vorschau virtueller Threads hinzugefügt. Hierbei handelt es sich um leichtgewichtige Threads, die das Schreiben und Verwalten leistungsstarker Multithread-Anwendungen erheblich vereinfachen.
  • Eine zweite experimentelle API für strukturierte Parallelität wurde hinzugefügt, die die Entwicklung von Multithread-Anwendungen vereinfacht, indem mehrere Aufgaben, die in verschiedenen Threads ausgeführt werden, als ein einziger Block behandelt werden.
  • Es wurde eine fünfte Vorschau 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 im HotSpot JIT-Compiler bereitgestellten Funktionen zur automatischen Vektorisierung skalarer Operationen ermöglicht die neue API die explizite Steuerung der Vektorisierung für die parallele Datenverarbeitung.

Source: opennet.ru

Kommentar hinzufügen