
Вышла Axiom JDK Pro 25
Сегодня вышла Axiom JDK Pro 25. Новая версия содержит:
- 2863 исправлений, из которых 2704 в JDK и 159 в FX.
- 18 JEP с новыми, финализированными, улучшенными и удалёнными фичами.
Чтобы попробовать Axiom JDK 25:
- Для разработчиков: войдите в личный кабинет разработчика, в разделе Продукты → Axiom JDK Standard выберите подходящую платформу и соответствующую версию для загрузки.
- Текущим клиентам: войдите в учётную запись на портале поддержки и в Центре загрузок скачайте Axiom JDK Pro 25.
Этот релиз включает много изменений, направленных на снижение порога входа в Java, улучшение JDK Flight Recorder (JFR), AOT-улучшения и другие.
Список JEP в JDK 25: резюме
JDK 25 — первая после JDK 21 версия с долгосрочной поддержкой (LTS). Самое время изучить новые возможности Java и морально подготовиться к будущей миграции.
В этой версии много фичей, направленных на упрощение процесса разработки Java-приложений. Кратко о JEP:
Язык и спецификация
- 507: Примитивные типы в паттернах, instanceof и switch (третья предварительная версия) делают
instanceof
иswitch
более удобными для работы с примитивными типами данных. - 511: Module Import Declarations упростит написание небольших программ, вводя концепции последовательно и не требуя знаний о классах и модулях с самого начала.
- 512: Compact Source Files and Instance Main Methods упростит написание небольших программ, вводя концепции последовательно и не требуя знаний о классах и модулях с самого начала.
- 513: Flexible Constructor Bodies конструкторы теперь могут содержать операторы перед явным вызовом конструктора
super(..)
илиthis(..)
. Эти операторы не могут ссылаться на создаваемый экземпляр, но могут инициализировать его поля. Это делает классы более надёжными при переопределении методов.
Библиотеки
- 470: PEM Encodings of Cryptographic Objects (предварительная версия) предлагает внедрить API для кодирования объектов, представляющих криптографические ключи, сертификаты в широко используемый транспортный формат PEM (Privacy-Enhanced Mail), а также для декодирования из этого формата обратно в объекты.
- 506: Scoped Values вводит значения с ограниченной областью действия, которые позволяют методу обмениваться неизменяемыми данными как с вызываемыми методами в рамках одного потока, так и с дочерними потоками. Scoped Values проще в понимании, чем локальные переменные потока. Они также требуют меньше пространства и времени, особенно при использовании вместе с виртуальными потоками (JEP 444) и structured concurrency (JEP 505).
- 510: Key Derivation Function API (KDF) представляет в пакете
javax.crypto
новое API, реализующее функции генерации производного ключа —javax.crypto.KDF
.
Многопоточность
- 505: Structured Concurrency (пятая предварительная версия) предлагает подход многопоточного программирования, главная идея которого заключается в следующем: если задача расщепляется на несколько конкурентных подзадач, то эти подзадачи воссоединяются в блоке кода главной задачи. При этом все подзадачи логически сгруппированы и организованы в иерархию, а каждая подзадача ограничена по времени жизни областью видимости блока кода главной задачи.
Производительность и рантайм
- 514: Ahead-of-Time Command-Line Ergonomics призван упростить создание AOT-кэшей, которые ускоряют запуск Java-приложений, путём упрощения команд, необходимых для типичных случаев использования.
- 515: Ahead-of-Time Method Profiling предлагает улучшить время прогрева, сделав профили выполнения методов из предыдущего запуска приложения мгновенно доступными при запуске виртуальной машины HotSpot. Это позволит JIT-компилятору генерировать нативный код сразу после запуска приложения, а не ждать сбора профилей.
- 519: Compact Object Headers в рамках Project Lilliput объединяют mark word и указатель на класс, сжимая итоговый заголовок до 64 бит. Уменьшение размера заголовков объектов снизит объём используемых данных в памяти, что потенциально уменьшит нагрузку на CPU и снизит потребление памяти в Java-программах.
- 521: Generational Shenandoah сможет динамически адаптировать размеры поколений и связанные параметры, что позволит сохранить низкие паузы, уменьшить использование памяти и в целом повысить производительность.
Профилирование
- 509: JFR CPU-Time Profiling (экспериментальная версия) предлагает улучшение JDK Flight Recorder (JFR) для сбора более точной информации о профилировании времени процессора в Linux.
- 518: JFR Cooperative Sampling предлагает повысить стабильность JDK Flight Recorder (JFR) при асинхронном семплировании стека Java-потоков. Для этого трассировка вызовов будет выполняться только в safepoint-ах, с минимизацией смещения (safepoint bias).
- 520: JFR Method Timing & Tracing добавляет расширение JDK Flight Recorder (JFR) для тайминга и трассировки методов с помощью инструментации байткода.
Прочее
- 502: Stable Values (предварительная версия) представляет API для объектов, содержащих неизменяемые данные. Stable Values обрабатываются JVM как константы, что позволяет осуществлять те же оптимизации производительности, что и при объявлении поля
final
. По сравнению сfinal
-полями Stable Values обеспечивают большую гибкость в отношении времени их инициализации. - 503: Удаление 32-битного порта x86 предполагает, что исходный код и инфраструктура сборки для поддержки систем x86 (32 бит) полностью удалены.
- 508: Vector API (десятый инкубатор) повышает производительность расчётов на массивах однотипных данных, которые компилируются в векторные инструкции во время исполнения приложения.
Подробнее о каждом JEP читайте в цикле статей: Что нового в Java 25. Часть 1, Что нового в Java 25. Часть 2, Что нового в Java 25. Часть 3.
Что ещё изменилось
Прекращение поддержки некоторых ОС
Axiom JDK Pro 25 недоступен на Windows x86 (32-бит) и macOS 10.x и не может быть запущен на них.
Обновление базы данных часовых поясов
В Axiom JDK Pro 25 обновлена база данных часовых поясов IANA до версии 2025b.
Ключевые изменения этого обновления:
- Для чилийского региона Айсен создан новый часовой пояс America/Coyhaique, в котором теперь будет действовать круглогодичное время UTC−03 (без перехода на летнее время).
- Это отличается от времени в Америке/Сантьяго с 20 марта 2025 года.
- В Айсене часы не будут переведены 5 апреля 2025 года.
- Это соответствует времени в Айсене и региону Магальянес.
- Иран перешёл с UTC+04 на UTC+03:30 10 ноября 1978 года, а не в конце года, как было зафиксировано ранее.
- Улучшено поведение инструмента zic:
- Он больше не создаёт недействительные символические ссылки при использовании
-l
с несколькими аргументами. - Устранена проблема с переполнением буфера.
- Он больше не создаёт недействительные символические ссылки при использовании
Выводы
Чтобы спланировать процесс миграции на Axiom JDK 25 LTS, установите Axiom JDK 25 и протестируйте новые возможности Java.
25 сентября состоится Java Rock Stars Meetup, на котором мы обсудим фичи Java 25, Project Leyden, поговорим про Spring и пообщаемся вживую. Регистрируйтесь по ссылке и добавляйтесь в чат Java Rock Stars Meetup в Telegram, чтобы быть в курсе новостей митапа. Там же мы выкладываем фотографии с митапа и обсуждаем разные вопросы о Java и Spring. До встречи на митапе!
А еще подписывайтесь на наш Telegram-канал и блог на Хабр, чтобы быть в курсе новостей мира Java и Axiom JDK.