Java SE 20 scaoileadh

Tar éis sé mhí forbartha, d'eisigh Oracle Java SE 20 (Java Platform, Standard Edition 20), a úsáideann an tionscadal foinse oscailte OpenJDK mar chur i bhfeidhm tagartha. Cé is moite de roinnt gnéithe as feidhm a bhaint, coinníonn Java SE 20 comhoiriúnacht siar le heisiúintí an ardáin Java roimhe seo - oibreoidh formhór na dtionscadal Java a scríobhadh roimhe seo gan athruithe nuair a reáchtáiltear iad faoin leagan nua. Ullmhaítear foirgnimh atá réidh le suiteáil de Java SE 20 (JDK, JRE agus Server JRE) le haghaidh Linux (x86_64, AArch64), Windows (x86_64) agus macOS (x86_64, AArch64). Arna fhorbairt ag an tionscadal OpenJDK, tá cur i bhfeidhm tagartha Java 20 foinse oscailte go hiomlán faoin gceadúnas GPLv2, le heisceachtaí GNU ClassPath a cheadaíonn nascadh dinimiciúil le táirgí tráchtála.

Tá Java SE 20 rangaithe mar scaoileadh tacaíochta rialta agus leanfaidh sé ag fáil nuashonruithe go dtí an chéad scaoileadh eile. Ba cheart go mbeadh an brainse Tacaíocht Fadtéarmach (LTS) Java SE 17, a leanfaidh de bheith ag fáil nuashonruithe go dtí 2029. Cuirfimid i gcuimhne duit, ag tosú le scaoileadh Java 10, gur aistrigh an tionscadal go próiseas forbartha nua, rud a thugann le tuiscint timthriall níos giorra chun eisiúintí nua a fhoirmiú. Forbraítear feidhmiúlacht nua anois i máistirbhrainse amháin a nuashonraítear i gcónaí, lena n-áirítear athruithe réamhdhéanta agus as a ndéantar brainsí a chraobhscaoileadh gach sé mhí chun eisiúintí nua a chobhsú.

I measc na ngnéithe nua i Java 20 tá:

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

Foinse: oscailtenet.ru

Add a comment