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) орнотулчу түзүмдөрү Linux (x86_64, AArch64), Windows (x86_64) жана macOS (x86_64, AArch64) үчүн даярдалган. OpenJDK долбоору тарабынан иштелип чыккан, Java 20 маалымдама ишке ашыруу коммерциялык продуктылар менен динамикалык байланышты камсыз кылуу үчүн GNU ClassPath өзгөчө учурлары менен GPLv2 лицензиясы боюнча толугу менен ачык булак болуп саналат.

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

Source: opennet.ru

Комментарий кошуу