Ukukhutshwa kweJava SE20

Emva kweenyanga ezintandathu zophuhliso, i-Oracle ikhuphe i-Java SE 20 (i-Java Platform, i-Standard Edition 20) iqonga, esebenzisa iprojekthi yomthombo ovulekileyo we-OpenJDK njengokuphunyezwa kwereferensi. Ngaphandle kokususwa kwezinye iimpawu ezithotyiweyo, iJava SE 20 igcina ukuhambelana ngasemva kunye nokukhutshwa kwangaphambili kweqonga leJava-ininzi yeeprojekthi ezibhalwe ngaphambili zeJava zisasebenza ngaphandle kokuguqulwa xa ziqhutywa phantsi koguqulelo olutsha. Izakhiwo ezifakelwayo zeJava SE 20 (JDK, JRE, kunye ne-Server JRE) zilungiselelwe iLinux (x86_64, AArch64), Windows (x86_64), kunye ne-macOS (x86_64, AArch64). Iphuhliswe yiprojekthi ye-OpenJDK, ukuphunyezwa kwereferensi ye-Java 20 ngumthombo ovulekileyo ngokupheleleyo phantsi kwelayisensi ye-GPLv2 kunye ne-GNU ClassPath ngaphandle kokuvumela ukudibanisa okuguquguqukayo kwiimveliso zorhwebo.

IJava SE 20 ihlelwa njengokukhutshwa kwenkxaso jikelele kwaye iya kuqhubeka ifumana uhlaziyo kude kube kukukhululwa okulandelayo. I-Long Term Support (LTS) yesebe kufuneka ibe yiJava SE 17, eya kuqhubeka ifumana ukuhlaziywa kude kube yi-2029. Masikukhumbuze ukuba ukuqala ngokukhululwa kwe-Java 10, iprojekthi itshintshele kwinkqubo entsha yophuhliso, ethetha umjikelezo omfutshane wokuqulunqwa kwezinto ezintsha. Ukusebenza okutsha ngoku kuyaphuhliswa kwisebe eliphambili elihlala lihlaziywa, elibandakanya iinguqu esele zenziwe kwaye amasebe afakwa kuwo rhoqo emva kweenyanga ezintandathu ukuzinzisa ukukhutshwa okutsha.

Iimpawu ezintsha kwiJava 20 ziquka:

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

umthombo: opennet.ru

Yongeza izimvo