Издаването на Java SE 26 и OpenJDK 26. Проект за интеграция на поддръжка на JavaScript и Python в JVM

След шест месеца разработка, компания Oracle публикува платформата Java SE 26 (Java Platform, Standard Edition 26), като референтна реализация, която се използва от отворен проект OpenJDK. С изключение на премахването на някои остарели функции, Java SE 26 запазва обратната съвместимост с предишните версии на платформата Java — повечето от преди написаните Java проекти ще работят без изменения на новата версия. Готовите за инсталиране сборки на Java SE 26 (JDK, JRE и Server JRE) са подготвени за Linux (x86_64, AArch64), Windows (x86_64) и macOS (x86_64, AArch64). Разработената в рамките на проекта OpenJDK референтна реализация Java SE 26 е напълно отворена под лицензия GPLv2 с изключения GNU ClassPath, позволяващи динамично свързване с търговски продукти.

Java SE 26 е класифициран като версия с нормален срок на поддръжка, обновления за която ще бъдат публикувани до следващото издание. За дългосрочна поддръжка (LTS) следва да се използва Java SE 25, Java SE 21 или Java SE 17, обновления за които ще бъдат публикувани до 2033, 2031 и 2029 година съответно (общодостъпни — до септември 2030, 2028 и 2026 година). Разширената поддръжка на LTS версията Java SE 8 ще продължи до 2030 година, а Java SE 11 — до 2032 година.

Сред промените в Java SE 26 (1, 2, 3, 4):

  • Реализирано е предупреждение при използване на дълбока рефлексия за изменение на полета, маркирани с ключовото слово „final“. В бъдеще е планирано по подразбиране да се изключат небезопасни функции на езика и, наред с други, да се направят полетата, маркирани като final, напълно несменяеми, премахвайки заобиколния път за тяхното изменение чрез дълбока рефлексия (API Reflection).
  • Премахнат е API Applet (java.applet.Applet*, javax.swing.JApplet), използван за стартиране на Java приложения в браузъра. Този API загуби актуалност след прекратяването на поддръжката на Java приставката за браузъри и беше обявен за остарял през 2021 година.
  • Възможността за използване на предварително генериран кеш (AOT — ahead-of-time) с всички сборници на боклук, включително ZGC (Z Garbage Collector), е реализирана. Промените предвиждат поддръжка на последователно зареждане на кешираните Java обекти в паметта, използвайки универсален и независим от сборниците на боклук формат, вместо директно картографиране в паметта на специфични представяния на кеша. Използването на AOT кеш намалява времето за стартиране и ускорява актуализацията (warmup) на виртуалната машина HotSpot.
  • В API HTTP Client е добавена поддръжка на протокол HTTP/3, позволяваща на приложенията и библиотеките да се свързват с сървъри по HTTP/3 след минимални промени в кода.
  • Производителността на сборника на боклук G1 е повишена благодарение на намаляване на блокировките за синхронизиране на приложенията с потоковете на сборника на боклук.
  • Предложен е втори предварителен вариант на API за кодиране и декодиране на обекти с криптографски ключове, сертификати и списъци с оттеглени сертификати, използвайки формата PEM (Pivacy-Enhanced Mail).
  • Предложен е за тестване шести предварителен вариант на API за структурирана конкурентност (Structured Concurrency), опростяваща разработката на многопоточни приложения чрез обработка на множество задачи, изпълнявани в различни потоци, като единен блок.
  • Добавена е втора предварителна версия на API Lazy Constants за работа с обекти, съдържащи неизменяеми данни и обработвани в JVM като константи. На подобни обекти се прилагат оптимизации на производителността, аналогични на полетата с ключова дума «final». В отличие от «final» новият API разделя създаването на постоянни стойности и тяхната инициализация, гарантира, че стойността може да бъде инициализирана само веднъж, намалява времето за стартиране на програмите и позволява прилагане на оптимизации за свиване на константи (constant-folding) в потребителския код, които преди това бяха използвани само във вътрешния код на JDK. class Application { // Беше: // static final UserService USERS = new UserService(); // Сега може: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • В механизма на съпоставяне с образец е предложен четвърти предварителен вариант за възможността за използване на примитивни типове (int, byte, char и други основни типове, които не са обекти) при всички видове шаблони, в оператора „instanceof“ и в блоковете „switch“. switch (x.getStatus()) { case 0 -> «okay»; case 1 -> «warning»; case 2 -> «error»; case int i -> «unknown status: » + i; } if (i instanceof byte b) { … b … }
  • Предложена е единадесета тестова реализация на API Vector, предоставящ функции за векторни изчисления, които се извършват с помощта на векторни инструкции на процесори x86_64 и AArch64 и позволяват едновременно прилагане на операции на няколко стойности (SIMD). В противовес на предоставяните в JIT компилатора HotSpot възможности за автоматична векторизация на скалярни операции, новото API дава възможност за явно управление на векторизацията за паралелна обработка на данни.

Освен това, компания Oracle обяви проект Detroit, който ще се развива в състава на OpenJDK и ще бъде насочен към подобряване на преносимостта между Java, JavaScript и Python. В рамките на проекта се предвижда предоставянето на възможността за вграждане в процеса на JVM runtime с JavaScript двигателя V8 и интерпретатора CPython. По-рано компания Oracle вече развиваше JavaScript двигателя Nashorn, работещ над виртуалната машина JVM, но прекрати проекта поради трудности с разработването на отделна версия на JavaScript при условия, когато основната екосистема е свързана с двигателя V8.

Допълнително може да се отбележи публикуването на актуализация на платформата за създаване на приложения с графичен интерфейс JavaFX 26. В близките часове също така се очаква издаването на универсалната виртуална машина GraalVM 26, която поддържа стартирането на приложения на JavaScript (Node.js), Python, Ruby, R, всякакви езици за JVM (Java, Scala, Clojure, Kotlin) и езици, за които може да бъде генериран биткод LLVM (C, C++, Rust).

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster