Java SE 20 Verëffentlechung

No sechs Méint Entwécklung huet Oracle d'Java SE 20 (Java Platform, Standard Edition 20) Plattform verëffentlecht, déi den OpenJDK Open Source Projet als Referenzimplementatioun benotzt. Mat Ausnam vun der Entfernung vun e puer deprecéierten Features, hält Java SE 20 Réckkompatibilitéit mat fréiere Verëffentlechungen vun der Java Plattform - déi meescht virdru geschriwwe Java Projete funktionnéieren nach ëmmer ouni Ännerung wann se ënner der neier Versioun lafen. Installéierbar Builds vu Java SE 20 (JDK, JRE a Server JRE) si virbereet fir Linux (x86_64, AArch64), Windows (x86_64) a macOS (x86_64, AArch64). Entwéckelt vum OpenJDK Projet, d'Java 20 Referenz Implementatioun ass voll Open Source ënner der GPLv2 Lizenz mat GNU ClassPath Ausnahmen fir dynamesch Verknëppung mat kommerziellen Produkter z'erméiglechen.

Java SE 20 ass als regulär Ënnerstëtzungsverëffentlechung kategoriséiert, mat Updates fir virun der nächster Verëffentlechung verëffentlecht ze ginn. De Long Term Support (LTS) Branche soll Java SE 17 sinn, déi Updates bis 2029 kréien. Erënneren, datt ugefaang mat der Verëffentlechung vun Java 10, de Projet op en neien Entwécklung Prozess gewiesselt, deen e méi kuerz Zyklus fir d'Bildung vun neie Verëffentlechungen implizéiert. Nei Funktionalitéit gëtt elo an enger stänneg aktualiséierter Master-Branche entwéckelt, déi scho fäerdeg Ännerunge integréiert an aus deenen d'Branchen all sechs Méint verzweigt ginn fir nei Verëffentlechungen ze stabiliséieren.

Nei Features am Java 20 enthalen:

  • Предложена предварительная поддержка ограниченных значений (Scoped Values), позволяющих совместно использовать неизменяемые данные в потоках и эффективно обмениваться данными между дочерними потоками (значения наследуются). Scoped Values развиваются для замены механизма переменных локальных к потоку (thread-local variables) и более эффективны при использовании очень большого числа виртуальных потоков (тысячи и миллионы потоков). Главное отличие Scoped Values от переменных локальных к потоку в том, что первые записываются один раз, в дальнейшем не могут быть изменены и остаются доступны только на время выполнения потока. 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(…); } }
  • Добавлена вторая предварительная реализация шаблонов записей (record pattern), расширяющая появившуюся в Java 16 возможность сопоставления с образцом средствами для разбора значений классов типа record. Например: 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); } }
  • Добавлена четвёртая предварительная реализация сопоставления по шаблону в выражениях «switch», позволяющая в метках «case» использовать не точные значения, а гибкие шаблоны, охватывающие сразу серию значений, для которых ранее приходилось использовать громоздкие цепочки выражений «if…else». 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(); }; }
  • Добавлена вторая предварительная реализация API FFM (Foreign Function & Memory), позволяющего организовать взаимодействие Java-программ с внешними кодом и данными через вызов функций из внешних библиотек и доступ к памяти вне JVM.
  • Добавлена вторая предварительная реализация виртуальных потоков, представляющих собой легковесные потоки, значительно упрощающие написание и сопровождение высокопроизводительных многопоточных приложений.
  • Добавлен второй вариант экспериментального API для cтруктурированного параллелизма, упрощающего разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • Добавлена пятая предварительная реализация API Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.

Source: opennet.ru

Setzt e Commentaire