Veröffentlichung von Java SE 20

Nach sechs Monaten Entwicklung hat Oracle die Plattform Java SE 20 (Java Platform, Standard Edition 20) veröffentlicht, wobei das OpenJDK-Projekt als Referenzimplementierung verwendet wird. Mit Ausnahme der Entfernung einiger veralteter Funktionen bleibt Java SE 20 rückwärtskompatibel mit früheren Versionen der Java-Plattform – die meisten zuvor geschriebenen Java-Projekte werden ohne Änderungen unter der neuen Version lauffähig sein. Installationsfertige 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) verfügbar. Die im Rahmen des OpenJDK-Projekts entwickelte Referenzimplementierung von Java 20 steht vollständig unter der GPLv2-Lizenz, mit Ausnahmen von GNU ClassPath, die dynamisches Binden an kommerzielle Produkte zulassen.

Java SE 20 gehört zur Kategorie der Releases mit regulärem Support, für die Updates bis zur nächsten Veröffentlichung bereitgestellt werden. Für eine Long-Term-Support (LTS) Version sollte Java SE 17 verwendet werden, dessen Updates bis 2029 bereitgestellt werden. Zur Erinnerung: Seit der Veröffentlichung von Java 10 hat das Projekt auf einen neuen Entwicklungsprozess umgestellt, der einen kürzeren Zyklus für neue Releases umfasst. Neue Funktionen werden jetzt in einem kontinuierlich aktualisierten Master-Branch entwickelt, in den fertige Änderungen aufgenommen werden, und von dem alle sechs Monate Stabilitäts-Branches für neue Releases abgezweigt werden.

Zu den Neuerungen in Java 20 gehören:

  • Die vorgeschlagene Verwendung von Scoped Values ermöglicht das gemeinsame Nutzen unveränderlicher Daten in Threads und einen effizienten Austausch von Daten zwischen untergeordneten Threads (die Werte werden vererbt). Scoped Values entwickeln sich als Ersatz für den Mechanismus der thread-lokalen Variablen und erweisen sich als effizienter bei der Verwendung einer sehr großen Anzahl an virtuellen Threads (tausende oder Millionen von Threads). Der Hauptunterschied zwischen Scoped Values und thread-lokalen Variablen besteht darin, dass erstere einmal geschrieben, anschließend nicht mehr verändert und nur während der Laufzeit des Threads verfügbar bleiben.class Server { final static ScopedValue CURRENT_USER = new ScopedValue();void serve(Request request, Response response) { var level = (request.isAuthorized() ? ADMIN : GUEST); var user = new User(level); 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(…); } }
  • Die zweite Vorabversion der Record-Muster wurde hinzugefügt, die die in Java 16 eingeführte Möglichkeit zur Mustererkennung für die Auswertung von Werten von Record-Typen erweitert. Zum Beispiel: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x + y); } }
  • Die vierte Vorabversion der Mustererkennung in 'switch'-Ausdrücken wurde hinzugefügt, die es ermöglicht, in den 'case'-Labels nicht nur exakte Werte, sondern flexible Muster zu verwenden, die eine Reihe von Werten abdecken, für die zuvor umfangreiche 'if…else'-Ausdrücke erforderlich waren. 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); default -> o.toString(); }; }
  • Die zweite Vorabversion der FFM (Foreign Function & Memory)-API wurde hinzugefügt, die die Interaktion von Java-Anwendungen mit externem Code und Daten durch den Aufruf von Funktionen aus externen Bibliotheken und den Zugriff auf Speicher außerhalb der JVM ermöglicht.
  • Eine zweite vorläufige Implementierung von virtuellen Threads wurde hinzugefügt, die leichte Threads darstellen und das Schreiben sowie die Wartung leistungsstarker, mehrthreadiger Anwendungen erheblich vereinfachen.
  • Eine zweite Version der experimentellen API für strukturierten Parallelismus wurde hinzugefügt, die die Entwicklung mehrthreadiger Anwendungen erleichtert, indem mehrere Aufgaben, die in verschiedenen Threads ausgeführt werden, als ein einziger Block bearbeitet werden.
  • Eine fünfte vorläufige Implementierung der Vector-API wurde hinzugefügt, die Funktionen für Vektorberechnungen bereitstellt, die unter Verwendung von Vektorbefehlen der x86_64- und AArch64-Prozessoren durchgeführt werden. Damit können gleichzeitig Operationen auf mehrere Werte (SIMD) angewendet werden. Im Gegensatz zu den im JIT-Compiler HotSpot verfügbaren Funktionen zur automatischen Vektorisierung skalarer Operationen ermöglicht die neue API eine explizite Steuerung der Vektorisierung für die parallele Datenverarbeitung.

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