Языки программирования

JDK 24: новые возможности Java 24

JDK 24: новые возможности Java 24

После выхода Java Development Kit (JDK) 23, который появился 17 сентября, началась работа над JDK 24. Пока в релиз предлагается включить пять функций: сборщики потоков, векторный API, API для работы с файлами классов, предупреждения, подготавливающие разработчиков к будущим ограничениям на использование JNI (Java Native Interface), и расширение позднего барьера для сборщика мусора G1. Также возможно включение множества других функций, в том числе многих, уже представленных в предварительной версии JDK 23.

JDK 24 будет выпущен 18 марта 2025 года и получил статус релиза без долгосрочной поддержки (LTS). Как и только что вышедший JDK 23, JDK 24 получит от Oracle только шесть месяцев поддержки уровня Premier. Сборки JDK 24 с ранним доступом можно найти на сайте jdk.java.net.

Последняя функция, предлагаемая для JDK 24, - сборщики потоков, которые расширят API потоков для поддержки пользовательских промежуточных операций. Сборщики потоков позволят потоковым конвейерам преобразовывать данные таким образом, который нелегко реализовать с помощью существующих встроенных промежуточных операций. Эта функция была предложена в качестве предварительной версии в JDK 22 и JDK 23. API будет окончательно доработан в JDK 24. Среди целей - сделать конвейеры потоков более гибкими и выразительными и позволить пользовательским промежуточным операциям манипулировать потоками бесконечного размера.

Также для JDK 24 предлагается векторный API. Векторный API, который станет девятым по счету, предназначен для выражения векторных операций, которые надежно компилируются во время выполнения в оптимальные векторные инструкции на поддерживаемых архитектурах процессоров, что позволяет достичь производительности, превосходящей эквивалентные скалярные вычисления.

Ранее этот API инкубировался в JDK 16 и JDK 23. В JDK 24 он будет повторно внедрен без изменений в API и без существенных реализаций по сравнению с JDK 23. Цели предложения включают ясное и краткое выражение широкого спектра векторных вычислений в API, который не зависит от платформы, обеспечивает надежную компиляцию и производительность во время выполнения на архитектурах x64 и AArch54, изящно деградирует и продолжает работать, когда векторные вычисления не могут быть выражены во время выполнения, и соответствует проекту Valhalla, используя усовершенствования объектной модели Java.

Первая функция JDK 24, официально названная «Подготовка к ограничению использования JNI», предусматривает выдачу предупреждений об использовании JNI и корректировку API Foreign Function and Memory (FFM), представленного в JDK 22, для последовательной выдачи предупреждений. Эти предупреждения призваны подготовить будущий релиз, обеспечивающий целостность по умолчанию за счет единообразного ограничения JNI и FFM API. Цели плана - сохранить JNI как стандартный способ взаимодействия с родным кодом, подготовить экосистему Java к будущим релизам, которые по умолчанию запретят взаимодействие с родным кодом, и согласовать использование JNI и FFM API, чтобы сопровождающие библиотек могли переходить с одного на другой, не требуя от разработчиков изменения параметров командной строки.

Вторая функция, расширение поздних барьеров для сборщика мусора G1, призвана упростить реализацию барьеров G1. Барьеры сборщика мусора G1 записывают информацию об обращениях к памяти приложения, перенося их расширение с ранних этапов конвейера компиляции C2 на более поздние. Среди целей - сократить время выполнения компиляции C2 при использовании сборщика G1, сделать барьеры G1 понятными для разработчиков HotSpot, не имеющих глубокого понимания C2, и гарантировать, что C2 сохраняет инварианты относительного упорядочивания обращений к памяти, точек безопасности и барьеров. Четвертая особенность - сохранение качества сгенерированного на C2 JIT (just-in-time)-компилируемого кода с точки зрения скорости и размера.

Третья особенность, API class-file, ранее представленный в JDK 22 и JDK 23, будет завершен в JDK 24 с небольшими изменениями. Этот API предоставляет стандартный API для разбора, генерации и преобразования файлов классов Java. Его цель - предоставить API для обработки файлов классов, который отслеживает формат файлов классов, определенный спецификацией Java Virtual Machine. Вторая цель - дать возможность компонентам JDK перейти на стандартный API и в конечном итоге удалить внутреннюю копию сторонней библиотеки ASM в JDK. Изменения со времени второго предварительного просмотра включают переименование значений перечислений, удаление некоторых полей, добавление методов и перегрузок методов, переименование методов, а также удаление интерфейсов и методов, которые считаются ненужными.

Дополнительные возможности JDK 24 будут определены в течение следующих нескольких месяцев. Потенциальные возможности Java 24 включают дальнейшие предварительные или окончательные выпуски функций, которые были представлены в JDK 23. К ним относятся объявления импорта модулей, позволяющие кратко импортировать все пакеты, экспортируемые модулем, и упрощающие повторное использование модульных библиотек; структурированный параллелизм, упрощающий параллельное программирование; скопированные значения, позволяющие совместно использовать неизменяемые данные; и гибкие тела конструкторов, дающие разработчикам большую свободу в выражении поведения конструкторов.

Третья функция, API для работы с файлами классов, ранее представленная в JDK 22 и JDK 23, будет завершена в JDK 24 с небольшими изменениями. Этот API предоставляет стандартный API для разбора, генерации и преобразования файлов классов Java. Его цель - предоставить API для обработки файлов классов, который отслеживает формат файлов классов, определенный спецификацией Java Virtual Machine. Вторая цель - дать возможность компонентам JDK перейти на стандартный API и в конечном итоге удалить внутреннюю копию сторонней библиотеки ASM в JDK. Изменения со времени второго предварительного просмотра включают переименование значений перечислений, удаление некоторых полей, добавление методов и перегрузок методов, переименование методов, а также удаление интерфейсов и методов, которые считаются ненужными.

Дополнительные возможности JDK 24 будут определены в течение следующих нескольких месяцев. Потенциальные возможности Java 24 включают дальнейшие предварительные или окончательные выпуски функций, которые были представлены в JDK 23. К ним относятся объявления импорта модулей, позволяющие кратко импортировать все пакеты, экспортируемые модулем, и упрощающие повторное использование модульных библиотек; структурированный параллелизм, упрощающий параллельное программирование; скопированные значения, позволяющие совместно использовать неизменяемые данные; и гибкие тела конструкторов, дающие разработчикам большую свободу в выражении поведения конструкторов.

Еще одна функция, представленная в JDK 23 и претендующая на появление в JDK 24, - примитивные типы в паттернах, instanceof и switch, цель которой - улучшить сопоставление паттернов, позволив использовать паттерны примитивных типов во всех контекстах паттерна, а также расширить instanceof и switch для работы со всеми примитивными типами. Загрузка классов с опережением времени, функция, призванная ускорить запуск Java, и шаблоны строк, функция, представленная в JDK 21 и JDK 22, но исключенная из JDK 23, также могут быть нацелены на JDK 24.

Последний LTS-релиз, JDK 21, вышел в сентябре 2023 года и должен получить как минимум пять лет премьер-поддержки от Oracle. Следующая версия LTS, JDK 25, должна выйти в сентябре 2025 года. Релизы LTS доминируют в распространении Java, что означает, что распространение JDK 23 и JDK 24 может оказаться на низком уровне, поскольку пользователи ожидают JDK 25.

Читайте также