Mwepụta Java SE 20

Mgbe ọnwa isii nke mmepe gachara, Oracle wepụtara Java SE 20 (Java Platform, Standard Edition 20), nke na-eji mmemme isi mmalite OpenJDK dị ka mmejuputa nrụtụ aka ya. Ewezuga mwepụ nke ụfọdụ njirimara anaghị akwụ ụgwọ, Java SE 20 na-akwado ndakọrịta azụ na mwepụta ndị gara aga nke ikpo okwu Java - ọrụ Java edeburu na mbụ ga-arụ ọrụ na-enweghị mgbanwe mgbe ọ na-agba ọsọ n'okpuru ụdị ọhụrụ. Njikere maka ịwụnye Java SE 20 (JDK, JRE na Server JRE) dị njikere maka Linux (x86_64, AArch64), Windows (x86_64) na macOS (x86_64, AArch64). Emepụtara site na ọrụ OpenJDK, mmejuputa ntụaka Java 20 bụ isi mmalite mepere emepe n'okpuru ikikere GPLv2, yana ndị GNU ClassPath na-enye ohere ijikọ ike na ngwaahịa azụmahịa.

Java SE 20 bụ nkewa dị ka ntọhapụ nkwado izugbe ga-aga n'ihu na-enweta mmelite ruo mgbe ntọhapụ na-esote. Alaka Nkwado Ogologo Ogologo (LTS) kwesịrị ịbụ Java SE 17, nke ga-aga n'ihu na-enweta mmelite ruo 2029. Ka anyị chetara gị na malite na ntọhapụ nke Java 10, ọrụ ahụ gbanwere na usoro mmepe ọhụrụ, na-egosi usoro dị mkpirikpi maka ịmepụta mwepụta ọhụrụ. A na-emepụta ọrụ ọhụrụ ugbu a n'otu alaka ụlọ ọrụ na-emelite mgbe niile, nke gụnyere mgbanwe ndị emebere na nke a na-esi na ya na-esi na alaka ụlọ ọrụ na-arụ ọrụ kwa ọnwa isii iji kwadoo mwepụta ọhụrụ.

Ihe ọhụrụ dị na Java 20 gụnyere:

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

isi: opennet.ru

Tinye a comment