Java SE 20 idasilẹ

Lẹhin oṣu mẹfa ti idagbasoke, Oracle ti tu Java SE 20 (Java Platform, Standard Edition 20) Syeed, eyiti o nlo iṣẹ orisun ṣiṣi OpenJDK gẹgẹbi imuse itọkasi. Yatọ si yiyọkuro diẹ ninu awọn ẹya ti a ti sọ tẹlẹ, Java SE 20 n ṣetọju ibaramu sẹhin pẹlu awọn idasilẹ iṣaaju ti pẹpẹ Java — awọn iṣẹ akanṣe Java ti a kọ tẹlẹ yoo tun ṣiṣẹ laisi iyipada nigbati o ba ṣiṣẹ labẹ ẹya tuntun. Awọn ipilẹ fifi sori ẹrọ ti Java SE 20 (JDK, JRE, ati Server JRE) ti pese sile fun Linux (x86_64, AArch64), Windows (x86_64), ati macOS (x86_64, AArch64). Ti dagbasoke nipasẹ iṣẹ akanṣe OpenJDK, imuse itọkasi Java 20 jẹ orisun ṣiṣi ni kikun labẹ iwe-aṣẹ GPLv2 pẹlu awọn imukuro GNU ClassPath lati gba ọna asopọ agbara si awọn ọja iṣowo.

Java SE 20 jẹ ipin bi itusilẹ atilẹyin gbogbogbo ati pe yoo tẹsiwaju lati gba awọn imudojuiwọn titi di itusilẹ atẹle. Ẹka Atilẹyin Igba pipẹ (LTS) yẹ ki o jẹ Java SE 17, eyiti yoo tẹsiwaju lati gba awọn imudojuiwọn titi di ọdun 2029. Jẹ ki a leti pe bẹrẹ pẹlu itusilẹ ti Java 10, iṣẹ akanṣe naa yipada si ilana idagbasoke tuntun kan, ti o tumọ si ọna kukuru fun dida awọn idasilẹ tuntun. Iṣẹ ṣiṣe tuntun ti ni idagbasoke ni ẹka titunto si imudojuiwọn nigbagbogbo, eyiti o pẹlu awọn ayipada ti a ti ṣetan ati lati eyiti awọn ẹka ti wa ni ẹka ni gbogbo oṣu mẹfa lati mu awọn idasilẹ titun duro.

Awọn ẹya tuntun ni Java 20 pẹlu:

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

orisun: opennet.ru

Fi ọrọìwòye kun