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

автор vadim


Java Development Kit 22, который должен появиться в марте 2024 года как следующая версия Java Standard Edition, на данный момент расширился и включает в себя 10 функций, включая вторую предварительную версию структурированного параллелизма и усовершенствование средства запуска приложений Java, предложенное в последние несколько дней. .

Возможная 11-я функция — сборщики потоков — предварительно была назначена для JDK 22, но еще не была указана на официальной веб-странице JDK 22 OpenJDK по состоянию на 27 ноября.

Эти новейшие функции присоединяются к предварительному просмотру заявлений перед super(…), предварительный просмотр API файла классов, привязка региона для сборщика мусора G1, второй предварительный просмотр шаблонов строк, безымянных переменных и шаблонов, API внешних функций и памяти, а также седьмой инкубатор векторного API. Также была предложена вторая предварительная версия неявно объявленных классов и основных методов экземпляра.

Сборки JDK 22 с ранним доступом доступны на jdk.java.net для Linux, Windows и Mac.

Благодаря структурированному параллелизму параллельное программирование упрощается благодаря API, который рассматривает группы связанных задач, выполняемых в разных потоках, как единую единицу работы, тем самым оптимизируя обработку и отмену ошибок, повышая надежность и улучшая наблюдаемость. Этот API был предварительно просмотрен в JDK 21 и инкубирован в JDK 19 и JDK 20.

Усовершенствование средства запуска приложений Java позволит запускать программу, поставляемую в виде нескольких файлов исходного кода Java. Цель возможности запуска многофайловых программ с исходным кодом состоит в том, чтобы сделать переход от небольших программ к более крупным программам более постепенным, позволяя разработчикам выбирать, стоит ли и когда приступать к настройке инструмента сборки.

API файлов классов, предварительная функция, предоставит стандартный API для анализа, генерации и преобразования файлов классов Java. Он предназначен для того, чтобы компоненты JDK могли перейти на стандартный API и в конечном итоге удалить внутреннюю копию JDK сторонней библиотеки ASM. Анализ, генерация и преобразование файлов классов повсеместно используются независимыми инструментами и библиотеками для проверки и расширения программ без ущерба для удобства сопровождения исходного кода.

Однако сейчас формат файлов классов Java развивается быстрее, чем раньше, благодаря шестимесячному периоду выпуска стандартной Java. Такая скорость эволюции привела к тому, что фреймворки чаще сталкиваются с файлами классов, которые более новые, чем библиотека файлов классов. Это привело к ошибкам и к тому, что разработчики фреймворков пытались написать код для анализа файлов классов в будущем и надеялись, что ничего серьезного не изменится. Планируется, что платформа Java определит и внедрит стандартный API-интерфейс файла классов, который будет развиваться вместе с форматом файла классов.

Закрепление региона для G1 предназначено для уменьшения задержки, поэтому сборку мусора (GC) не нужно отключать во время критических регионов Java Native Interface (JNI). Цели включают отсутствие остановок потоков из-за критических регионов JNI, отсутствие дополнительных задержек при запуске сборки мусора из-за этих регионов, отсутствие регрессии времени паузы GC, когда ни один из этих регионов не активен, и минимальную регрессию времени паузы GC, когда эти регионы активны. . В настоящее время сборщик мусора по умолчанию, G1, отключает сбор мусора в каждом критическом регионе, что может существенно повлиять на задержку. Благодаря этому изменению потоки Java никогда не будут ждать завершения операции G1 GC.

Неявно объявленные классы и методы экземпляра в настоящее время просматриваются в JDK 21 как безымянные классы и методы экземпляра. Эта функция получит пересмотренное название и существенные изменения в JDK 22 во второй предварительной версии. Эта возможность предназначена для развития языка Java, чтобы учащиеся могли писать свои первые программы без необходимости понимать особенности языка, предназначенные для больших программ. Студенты могли писать упрощенные объявления для одноклассовых программ, а затем плавно расширять программы, чтобы использовать более продвинутые функции по мере роста их навыков. Вторая предварительная версия вносит изменения в объявление класса и вызов метода, которые упрощают исходное предложение.

Сборщики потоков (предварительная версия JDK 22) улучшат Java Stream API для поддержки пользовательских промежуточных операций. Это позволит потоковым конвейерам преобразовывать данные способами, которые трудно достижимы с помощью существующих встроенных промежуточных операций. Цели включают в себя сделать потоковые конвейеры более гибкими и выразительными и, насколько это возможно, позволить настраиваемым промежуточным операциям манипулировать потоками бесконечного размера. Будет предоставлен API для пользовательских промежуточных операций, который позволит разработчикам преобразовывать конечные и бесконечные потоки предпочтительными способами.

Предварительный просмотр заявлений ранее super(…) относится к конструкторам в языке, позволяя операторам, которые не ссылаются на создаваемый экземпляр, появляться перед явным конструктором. Цель плана состоит в том, чтобы предоставить разработчикам большую свободу выражать поведение конструкторов, обеспечивая более естественное размещение логики, которая в настоящее время должна быть учтена во вспомогательных статических методах, вспомогательных промежуточных конструкторах или аргументах конструктора.

Другая цель — сохранить существующую гарантию того, что конструкторы выполняются в порядке сверху вниз во время создания экземпляра класса, гарантируя, что код в конструкторе подкласса не сможет мешать созданию экземпляра суперкласса. Третья заявленная цель — не требовать каких-либо изменений в JVM. На данный момент это единственная функция JDK 22, которая еще не была предварительно просмотрена или реализована в стандартной Java.

Строковые шаблоны во второй предварительной версии JDK 22 будут дополнять существующие строковые литералы и текстовые блоки Java путем объединения текстового литерала со встроенными выражениями и процессорами шаблонов для получения специализированных результатов. Цели включают в себя:

  • Упрощение написания программ Java за счет упрощения выражения строк, включающих значения, вычисляемые во время выполнения.
  • Повышение читаемости выражений, в которых смешаны текст и выражения, независимо от того, помещается ли текст в одну исходную строку или занимает несколько исходных строк.
  • Повышение безопасности программ, которые составляют строки из значений, предоставленных пользователем, и передают их другим системам, поддерживая проверку и преобразование как шаблона, так и значений его встроенных выражений.
  • Сохранение гибкости за счет разрешения библиотекам Java определять синтаксис форматирования, используемый в строковых шаблонах.
  • Упрощение использования API, которые принимают строки, написанные на языках, отличных от Java, таких как XML и JSON.
  • Возможность создания нестроковых значений, вычисленных на основе буквального текста и встроенных выражений, без необходимости проходить через промежуточное строковое представление.

Строковые шаблоны появляются в первой предварительной версии JDK 21. Вторая предварительная версия предназначена для получения дополнительного опыта и отзывов. За исключением технического изменения типов выражений шаблона, изменений по сравнению с первой предварительной версией нет.

Векторный API (седьмой инкубатор) будет выражать векторные вычисления, которые во время выполнения надежно компилируются в оптимальные векторные инструкции на поддерживаемых архитектурах ЦП, обеспечивая производительность, превосходящую эквивалентные скалярные вычисления. API предоставляет возможность писать сложные векторные алгоритмы на Java с использованием существующего алгоритма автоматической векторизации HotSpot, но с пользовательской моделью, которая делает векторизацию более предсказуемой и надежной.

Эта возможность была реализована в предыдущих версиях Java, начиная с JDK 16 в марте 2021 года. Цели API включают в себя ясность и краткость, независимость от платформы и обеспечение надежной компиляции во время выполнения и производительности на архитектурах x64 AArch64, а также постепенное ухудшение качества. . Эта возможность предназначена для использования усовершенствований Project Valhalla в объектной модели Java, позволяющих программам работать с объектами-значениями.

Безымянные переменные и шаблоны можно использовать, когда требуются объявления переменных или вложенные шаблоны, но они никогда не используются. Цели плана включают в себя:

  • Фиксация намерения разработчика о том, что данный параметр привязки или лямбда-выражения не используется, и принудительное применение этого свойства для уточнения программ и уменьшения вероятности ошибок.
  • Улучшение удобства сопровождения кода за счет определения переменных, которые должны быть объявлены, но не используются.
  • Разрешить появление нескольких шаблонов в одной метке случая при условии, что ни один из них не объявляет переменные шаблона.
  • Улучшение читаемости шаблонов записей за счет исключения ненужных шаблонов вложенных типов.

Это предложение было предварительно просмотрено в JDK 21 и будет доработано без изменений в JDK 22.

Внешние функции и API памяти позволяет программам Java взаимодействовать с кодом и данными вне среды выполнения Java. В предложении говорится, что, вызывая внешние функции и безопасно обращаясь к внешней памяти, программы Java могут вызывать собственные библиотеки и обрабатывать собственные данные без хрупкости JNI (Java Native Interface).

API внешних функций и памяти ранее был предварительно представлен в JDK 19, JDK 20 и JDK 21. Он будет окончательно доработан в JDK 22. Последние версии охватывают три области: поддержка произвольных наборов символов для собственных строк, предоставление клиентам возможности создавать функции на языке C. дескрипторы программно и введение атрибута манифеста JAR-файла Enable-Native-Access. Последний позволяет исполняемым файлам JAR вызывать ограниченные методы без использования параметра командной строки —enable-native-access.

Java 22 — это выпуск Feature, который должен получить 19 марта 2024 года, и получит шестимесячную поддержку от Oracle, в отличие от только что выпущенного JDK 21, который представляет собой выпуск с долгосрочной поддержкой (LTS), который будет получать поддержку не менее восьми лет. Компании, помимо Oracle, могут предложить более длительную поддержку JDK 22, если захотят. Стандартные обновления Java выходят каждые шесть месяцев, а выпуски LTS — каждые два года.

Другие возможности, которые могут появиться в JDK 22, включают структурированный параллелизм, который упрощает параллельное программирование, рассматривая группы связанных задач, выполняемых в разных потоках, как единую единицу работы, и вычисляемые константы, которые представляют собой неизменяемые держатели значений, инициализируемые не более одного раза.

Перед общедоступностью JDK 22 должен пройти этапы свертывания в декабре и январе, а затем два варианта выпуска в феврале 2024 года.

Дальше читайте это:

  • Лучшее программное обеспечение с открытым исходным кодом 2023 года
  • Сертификаты программирования все еще имеют значение?
  • Облачные вычисления больше не являются пустяком
  • Что такое генеративный ИИ? Искусственный интеллект, который создает
  • Программирование с помощью ИИ: советы и лучшие практики от разработчиков
  • Почему Wasm — это будущее облачных вычислений

Related Posts

Оставить комментарий