JDK 19: новые возможности в Java 19
https://t.me/BookJavaВыпуск не-LTS, который должен быть выпущен в сентябре, Java 19 будет включать структурированный параллелизм, виртуальные потоки, сопоставление шаблонов для выражений переключения, векторный API и порт Linux/RISC-V.
Комплект Java Development Kit 19, который должен выйти в сентябре этого года, теперь полностью завершен и находится на втором этапе вывода из эксплуатации. Семь функций нацелены на выпуск, включая структурированный параллелизм, шаблоны записи, предварительный просмотр сторонних функций и API памяти, а также поддержку архитектуры набора инструкций Linux/RISC-V (ISA) с открытым исходным кодом.
С учетом этой последней вехи в процессе выпуска стандартной Java другие запланированные возможности, такие как универсальные универсальные шаблоны и объекты-значения , придется отложить до более поздней версии платформы. JDK 19 следует за прибытием JDK 18 22 марта . Стандартная версия Java выходит каждые шесть месяцев.
Официальный выпуск JDK 19 для производственного использования запланирован на 20 сентября, а релиз-кандидаты будут опубликованы 11 и 25 августа. В прошлом месяце была достигнута начальная фаза постепенного снижения производительности. Сборки раннего доступа JDK 19 доступны по адресу jdk.java.net/19 . Функции JDK 19 включают в себя:
- Структурированный параллелизм на этапе инкубации предназначен для упрощения многопоточного программирования с помощью API структурированного параллелизма. Этот параллелизм рассматривает несколько задач, выполняемых в разных потоках, как единую единицу работы, чтобы упростить обработку ошибок и отмену. Надежность и наблюдаемость улучшены.
- Предварительный просмотр шаблонов записей для деконструкции значений записей. Шаблоны записей и шаблоны типов могут быть вложены друг в друга, чтобы обеспечить декларативную, мощную и компонуемую форму навигации и обработки данных. Цели предложения включают расширение сопоставления шаблонов для выражения более сложных составных запросов данных без изменения синтаксиса или семантики шаблонов типов. Это предложение основано на сопоставлении шаблонов для
instanceof, представленном в JDK 16 в марте 2021 года. В будущих планах может потребоваться расширение шаблонов записей с помощью таких возможностей, как шаблоны массивов иvarargшаблоны. Запись шаблонов является частью проекта Amber , направленного на изучение и развитие небольших функций Java, ориентированных на повышение производительности. - Предварительный просмотр чужой функции и API памяти , который представит API, с помощью которого Java-программы могут взаимодействовать с кодом и данными вне среды выполнения Java. Благодаря эффективному вызову сторонних функций (т. е. кода вне JVM) и безопасному доступу к чужой памяти (т. е. памяти, не управляемой JVM) API позволяет программам Java вызывать собственные библиотеки и обрабатывать собственные данные без опасности и хрупкости Java Native. Интерфейс (JNI). API внешней функции и памяти объединяет два более ранних инкубационных API: API доступа к внешней памяти и API внешнего компоновщика. Внешние функции и API памяти ранее инкубировались в JDK 17 и повторно инкубировались в JDK 18 . Цели предложения включают простоту использования, производительность, универсальность и безопасность.
- Предварительный просмотр виртуальных потоков , представляющих собой облегченные потоки, которые значительно сокращают усилия по написанию, обслуживанию и наблюдению за высокопроизводительными параллельными приложениями. Цели включают в себя обеспечение возможности масштабирования серверных приложений, написанных в простом стиле «поток на запрос», с почти оптимальным использованием оборудования, позволяя существующему коду, использующему
java.langThread API для внедрения виртуальных потоков с минимальными изменениями, а также для устранения неполадок, отладки и профилирования виртуальных потоков с помощью существующих инструментов JDK. Целью этого предложения не является изменение базовой модели параллелизма в Java или предложение новой конструкции параллелизма данных либо в языке Java, либо в библиотеках Java. Также не ставится цель удалить традиционную реализацию потоков или скрытую миграцию существующих приложений для использования виртуальных потоков. - Третий предварительный просмотр сопоставления шаблонов для выражений и операторов switch , расширяющий сопоставление шаблонов до
switch, чтобы позволить тестировать выражение по ряду шаблонов, каждый из которых имеет определенное действие, поэтому сложные запросы, ориентированные на данные, могут быть выражены лаконично и безопасно. Эта возможность ранее была предварительно представлена в JDK 17 и JDK 18. В третьей предварительной версии будут добавлены улучшения, включая замену защищенных шаблоновwhenпредложениями вswitchблоках. Кроме того, семантика переключения шаблона во время выполнения, когда значение выражения селектора равно null, более тесно связана с устаревшейswitchсемантикой. Цели плана включают расширение выразительности и применимостиswitchвыражения и операторы, позволяя шаблонам появляться в метках case. Другие цели включают в себя предоставление разработчикам возможности ослабить историческую враждебность к null,switchкогда это необходимо, повышение безопасностиswitchоператоров и обеспечение того, чтобы существующиеswitchвыражения и операторы продолжали компилироваться без изменений и выполнялись с идентичной семантикой. - Четвертая инкубация векторного API , который будет выражать векторные вычисления, которые надежно компилируются во время выполнения в оптимальные векторные инструкции на поддерживаемых архитектурах ЦП, что обеспечивает более высокую производительность по сравнению с эквивалентными скалярными вычислениями. Разработчики, использующие API, получают возможность писать сложные векторные алгоритмы на Java, используя автовекторизатор HotSpot, но с пользовательской моделью, которая делает векторизацию более предсказуемой и надежной. Векторный API ранее был инкубирован в JDK 16, JDK 17 и JDK 19.
- Усовершенствования API, предложенные для JDK 19, включают улучшения для загрузки и сохранения векторов в и из
MemorySegments, как определено в предварительной версии API внешних функций и памяти. JDK 19 также добавит две векторные операции с перекрестными полосами, сжатие и расширение, вместе с дополнительной операцией сжатия векторной маски. Операция сжатия вектора сопоставляет дорожки исходного вектора, выбранного маской, с целевым вектором в порядке дорожек, в то время как операция расширения делает обратное. Операция сжатия полезна при фильтрации результатов запроса. - В качестве еще одного дополнения к векторному API будут расширены побитовые интегральные линейные операции, в том числе такие операции, как подсчет количества единичных битов, изменение порядка битов на обратный, а также сжатие и расширение битов. Цели API заключались в том, чтобы быть ясным и кратким, независимым от платформы, иметь надежную производительность во время выполнения и компиляции на архитектурах x64 и AArch64, а также обеспечивать «изящную» деградацию для ситуаций, в которых векторное вычисление не может быть полностью выражено во время выполнения в виде последовательности операций. векторные операции.
- С портом Linux/RISC-V Java получит поддержку набора аппаратных инструкций, который уже поддерживается широким спектром языковых наборов инструментов. RISC-V на самом деле представляет собой семейство родственных ISA. Порт Linux/RISC-V будет поддерживать только конфигурацию RV64GV RISC-V, 64-разрядную ISA общего назначения, которая включает векторные инструкции. Разработчики Java могут рассмотреть другие конфигурации RISC-V в будущем.
Порт будет поддерживать следующие параметры виртуальной машины HotSpot: интерпретатор шаблонов, JIT-компилятор C1 (клиент), JIT-компилятор C2 (сервер) и все текущие основные сборщики мусора, включая ZGC и Shenandoah. Фактическое портирование почти завершено; Предложение по улучшению JDK (JEP) сосредоточено на интеграции порта в основной репозиторий JDK.
Как и JDK 18, JDK 19 должен быть краткосрочным выпуском с шестимесячной поддержкой Premier на высшем уровне.