Java SE 20 מעלדונג

נאָך זעקס חדשים פון אַנטוויקלונג, Oracle באפרייט Java SE 20 (Java Platform, Standard Edition 20), וואָס ניצט די אָפֿן-מקור OpenJDK פּרויעקט ווי אַ רעפֿערענץ ימפּלאַמענטיישאַן. מיט די ויסנעם פון די באַזייַטיקונג פון עטלעכע פאַרעלטערט פֿעיִקייטן, Java SE 20 מיינטיינז צוריק קאַמפּאַטאַבילאַטי מיט פרייַערדיק ריליסיז פון די Java פּלאַטפאָרמע - רובֿ פריער געשריבן Java פּראַדזשעקס וועט אַרבעטן אָן ענדערונגען ווען זיי לויפן אונטער די נייַע ווערסיע. גרייט-צו-ינסטאַלירן בילדער פון Java SE 20 (JDK, JRE און Server JRE) זענען צוגעגרייט פֿאַר לינוקס (x86_64, AArch64), Windows (x86_64) און macOS (x86_64, AArch64). דעוועלאָפּעד דורך די OpenJDK פּרויעקט, די Java 20 רעפֿערענץ ימפּלאַמענטיישאַן איז גאָר אָפֿן מקור אונטער די GPLv2 דערלויבעניש, מיט GNU ClassPath אויסנעמען אַלאַוינג דינאַמיש פֿאַרבינדונג מיט געשעפט פּראָדוקטן.

Java SE 20 איז קלאַסאַפייד ווי אַ רעגולער שטיצן מעלדונג און וועט פאָרזעצן צו באַקומען דערהייַנטיקונגען ביז דער ווייַטער מעלדונג. די לאנג טערמין שטיצן (LTS) צווייַג זאָל זיין Java SE 17, וואָס וועט פאָרזעצן צו באַקומען דערהייַנטיקונגען ביז 2029. לאָזן אונדז דערמאָנען איר אַז סטאַרטינג מיט די מעלדונג פון Java 10, די פּרויעקט איז סוויטשט צו אַ נייַע אַנטוויקלונג פּראָצעס, וואָס ימפּלייז אַ קירצער ציקל פֿאַר די פאָרמירונג פון נייַע ריליסיז. ניו פאַנגקשאַנאַליטי איז איצט דעוועלאָפּעד אין איין קעסיידער דערהייַנטיקט בעל צווייַג, וואָס כולל פאַרטיק ענדערונגען און פון וואָס צווייגן זענען בראַנטשט יעדער זעקס חדשים צו סטייבאַלייז נייַע ריליסיז.

נייַע פֿעיִקייטן אין Java 20 אַרייַננעמען:

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

מקור: opennet.ru

לייגן אַ באַמערקונג