Java SE 20 famoahana

Taorian'ny enim-bolana ny fampandrosoana, Oracle dia namoaka Java SE 20 (Java Platform, Standard Edition 20), izay mampiasa ny open-source OpenJDK tetikasa ho toy ny reference fampiharana. Ankoatra ny fanesorana ireo endri-javatra efa lany andro, ny Java SE 20 dia mitazona ny fifanarahana mihemotra amin'ny famoahana ny sehatra Java teo aloha - ny ankamaroan'ny tetikasa Java nosoratana teo aloha dia hiasa tsy misy fiovana rehefa mandeha amin'ny dikan-teny vaovao. Ny fananganana Java SE 20 (JDK, JRE ary Server JRE) efa vonona ho an'ny Linux (x86_64, AArch64), Windows (x86_64) ary macOS (x86_64, AArch64). Novolavolain'ny tetikasa OpenJDK, ny fampiharana reference Java 20 dia loharano misokatra tanteraka eo ambanin'ny lisansa GPLv2, miaraka amin'ny GNU ClassPath maningana mamela ny fifandraisana mavitrika amin'ny vokatra ara-barotra.

Java SE 20 dia sokajiana ho famotsorana fanohanana tsy tapaka ary hanohy handray fanavaozana mandra-pahatongan'ny famoahana manaraka. Ny sampana Long Term Support (LTS) dia tokony ho Java SE 17, izay mbola handray fanavaozana hatramin'ny 2029. Avelao izahay hampahatsiahy anao fa nanomboka tamin'ny famoahana ny Java 10, ny tetikasa dia nivadika ho dingana fampandrosoana vaovao, izay midika fa tsingerina fohy kokoa amin'ny fananganana famoahana vaovao. Ny fiasa vaovao dia novolavolaina ao amin'ny sampana master iray havaozina tsy tapaka, izay misy ny fanovana efa vita ary avy amin'ireo sampana nosampana isaky ny enim-bolana mba hanamafisana ny famoahana vaovao.

Ny endri-javatra vaovao ao amin'ny Java 20 dia ahitana:

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

Add a comment