Издание на Java SE 20

По шест месеци развој, Oracle го издаде Java SE 20 (Јава платформа, стандардно издание 20), кој го користи проектот со отворен код OpenJDK како референтна имплементација. Со исклучок на отстранувањето на некои застарени функции, Java SE 20 одржува компатибилност наназад со претходните изданија на платформата Java - повеќето претходно напишани Java проекти сè уште ќе работат без измени кога се извршуваат според новата верзија. Инсталираните изданија на Java SE 20 (JDK, JRE и Server JRE) се подготвени за Linux (x86_64, AArch64), Windows (x86_64) и macOS (x86_64, AArch64). Развиена од проектот OpenJDK, референтната имплементација на Java 20 е целосно отворена под лиценцата GPLv2 со исклучоци на GNU ClassPath за да се овозможи динамично поврзување со комерцијални производи.

Java SE 20 е класифициран како издание за општа поддршка и ќе продолжи да добива ажурирања до следното издание. Филијалата за долгорочна поддршка (LTS) треба да биде Java SE 17, која ќе продолжи да добива ажурирања до 2029 година. Да потсетиме дека почнувајќи од објавувањето на Java 10, проектот се префрли на нов развоен процес, што подразбира пократок циклус за формирање на нови изданија. Сега е развиена нова функционалност во една постојано ажурирана главна гранка, која вклучува готови промени и од која филијалите се разгрануваат на секои шест месеци за да се стабилизираат новите изданија.

Новите функции во Java 20 вклучуваат:

  • Предложена предварительная поддержка ограниченных значений (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 даёт возможность явно управлять векторизацией для параллельной обработки данных.

Извор: opennet.ru

Додадете коментар