Java Development Kit (JDK) 23, последнее обновление стандартного языка Java, уже общедоступно. Основные возможности и изменения варьируются от предварительных объявлений об импорте модулей, сборщиков потоков, структурированного параллелизма, скопированных значений и API для файлов классов до обесценивания методов доступа к памяти в sun.misc.Unsafe.
Набор функций для JDK 23 был завершен на четной дюжине, но на самом деле это тысячи улучшений, если учитывать исправления ошибок и меньшие возможности, по словам Oracle. Предложенный третий вариант шаблонов строк, который был представлен в JDK 22 и JDK 21, был исключен из JDK 23. Разработчики могут загрузить JDK 23 с сайта oracle.com.
JDK 23 включает в себя третью предварительную версию скопированных значений, структурированного параллелизма и неявно объявленных классов и методов экземпляра, а также вторую предварительную версию гибких тел конструкторов, сборщиков потоков и API для файлов классов. JDK 23 также включает декларации импорта модулей, комментарии к документации в формате Markdown, восьмой инкубатор векторного API и предварительный просмотр примитивных типов в паттернах, instanceof и switch. В релизе устарели методы доступа к памяти в sun.misc.UnSafe и режим генерации сборщика мусора Z стал режимом по умолчанию.
JDK 23 - это не-LTS (Long Term Support) релиз с поддержкой от Oracle всего шесть месяцев, в отличие от JDK 21, который является LTS релизом с поддержкой в течение нескольких лет.
Скопированные значения, представленные ранее в JDK 22 и JDK 21, позволяют методу обмениваться неизменяемыми данными как со своими вызовами внутри потока, так и с дочерними потоками. По сравнению с локальными значениями в потоке, в скопированных значениях легче рассуждать, и они имеют меньшие затраты пространства и времени, особенно при использовании вместе с виртуальными потоками и структурированным параллелизмом, говорится в предложении. Предварительный просмотр скопированных значений в JDK 23 вносит одно изменение по сравнению с предыдущими предварительными просмотрами: Тип параметра операции в методе ScopedValue.callWhere - это новый функциональный интерфейс, который позволяет компилятору Java определить, может ли быть выброшено проверяемое исключение. С этим изменением метод ScopeValue.getWhere больше не нужен и был удален.
В JDK 23 устаревают методы доступа к памяти в sun.misc.Unsafe для удаления в будущем выпуске. Эти методы не поддерживаются и заменены стандартными API, а именно API VarHandle и API внешней функции и памяти. Разработчикам библиотек рекомендуется перейти с sun.misc.Unsafe на поддерживаемые замены, чтобы приложения могли плавно переходить на современные выпуски JDK. Цели предложения - подготовить экосистему к удалению методов доступа к памяти в sun.misc.Unsafe в будущем выпуске JDK, а также помочь разработчикам осознать, когда их приложения прямо или косвенно полагаются на эти методы доступа к памяти. Целью не является полное удаление sun.misc.Unsafe, говорится в предложении, поскольку небольшое количество его методов не используется для доступа к памяти. Эти методы будут устаревшими и удалены отдельно.
Структурированный параллелизм получит третье предварительное представление в JDK 23, после того как он был представлен в JDK 22 и JDK 21. Его цель - упростить параллельное программирование путем внедрения API для структурированного параллелизма, который рассматривает группы связанных задач в разных потоках как единую единицу работы, оптимизирует обработку ошибок и отмену для повышения надежности и наблюдаемости. Цели этого предложения включают продвижение стиля программирования, который может устранить общие риски, возникающие при отмене и завершении работы, такие как утечка потоков и задержки при отмене, а также улучшить наблюдаемость параллельного кода.
Гибкие тела конструкторов получат второе предварительное представление в JDK 23. Эта возможность была представлена в JDK 22 под названием statement before super(...). Предлагаемая возможность позволяет телу конструктора инициализировать поля одного класса до явного вызова конструктора. Она призвана предоставить разработчикам большую свободу в выражении поведения конструкторов, обеспечивая более естественное размещение логики, которая в настоящее время должна быть вынесена во вспомогательные статические методы, вспомогательные промежуточные конструкторы или аргументы конструктора. Эта возможность также призвана сохранить гарантию того, что конструкторы запускаются в порядке сверху вниз во время инстанцирования класса, гарантируя, что код в конструкторе подкласса не сможет вмешаться в инстанцирование суперкласса.
Неявно объявленные классы и методы экземпляра, ранее представленные в JDK 21 и JDK 22, развивают язык Java, позволяя новичкам писать свои первые программы без необходимости понимать особенности языка, предназначенные для больших программ. Новички могут писать упрощенные декларации для программ с одним классом, а затем по мере развития своих навыков плавно расширять программы, используя более продвинутые функции. В JDK 23 добавлены два усовершенствования: неявно объявленные классы будут автоматически импортировать три статических метода для простого ввода/вывода текста с консоли, а также будут импортировать по требованию все публичные классы верхнего уровня и интерфейсы пакетов, экспортируемых модулем java.base.
Декларации импорта модулей - функция предварительного просмотра в JDK 23 - расширяют возможности Java, позволяя в сжатой форме импортировать все пакеты, экспортируемые модулем. Это предложение, созданное в августе 2023 года, упрощает повторное использование модульных библиотек, но не требует, чтобы импортируемый код находился в самом модуле. Среди целей - упростить использование модульных библиотек, позволив импортировать сразу целые модули, и избежать шума от многочисленных объявлений типа-импорта по требованию при использовании различных частей API, экспортируемых модулем. Другая цель - позволить новичкам легче использовать сторонние библиотеки и фундаментальные классы Java без необходимости изучать их расположение в иерархии пакетов.
Комментарии к документации в формате Markdown, предложение, созданное в сентябре прошлого года, позволяет писать комментарии к документации JavaDoc в формате Markdown, а не только в смеси HTML и @tags JavaDoc. Эта предлагаемая функция призвана облегчить написание и чтение комментариев к документации API в виде исходного текста за счет возможности использовать синтаксис Markdown наряду с элементами HTML и тегами JavaDoc. Также предполагается расширить API Compiler Tree, чтобы другие инструменты, анализирующие комментарии к документации, могли работать с содержимым в формате Markdown. План не должен негативно повлиять на интерпретацию существующих комментариев к документации.
В JDK 23 режим сборщика мусора Z (ZGC) по умолчанию переключен на режим генерации. Поколенческий ZGC призван повысить производительность Java-приложений за счет более частого сбора молодых объектов, которые, как правило, умирают молодыми. Негенеративный режим в настоящее время устарел, и его планируется убрать в одном из будущих выпусков. ZGC был добавлен в Java в JDK 15 в сентябре 2020 года.
Векторный API, который находится в стадии разработки с JDK 16, представляет API для выражения векторных вычислений, которые надежно компилируются во время выполнения в оптимальные векторные инструкции на поддерживаемых архитектурах CPU. Цели предложения включают предоставление ясного и четкого API, обеспечение надежной компиляции и производительности во время выполнения на архитектурах x64 и AArch64, обеспечение плавной деградации, платформозависимость и согласованность с проектом Valhalla, который призван дополнить объектную модель Java объектами значений.
Сборщики потоков, ранее представленные в JDK 22, расширяют API потоков для поддержки пользовательских промежуточных операций. Сборщики потоков позволяют потоковым конвейерам преобразовывать данные таким образом, который нелегко реализовать с помощью существующих встроенных промежуточных операций. Среди целей - сделать потоковые конвейеры более гибкими и выразительными и позволить пользовательским промежуточным операциям манипулировать потоками бесконечного размера.
API для работы с файлами классов, также являющийся предварительной функцией, предназначен для предоставления API для обработки файлов классов, который отслеживает формат файлов классов, определенный спецификацией Java Virtual Machine. Эта предлагаемая функция позволит компонентам JDK перейти на стандартный API и в конечном итоге удалить внутреннюю копию сторонней библиотеки ASM в JDK. API для файлов классов добавит усовершенствования, включая оптимизацию класса CodeBuilder, который имеет фабричные методы для инструкций байткода, включая низкоуровневые фабрики, фабрики среднего уровня и высокоуровневые сборщики для базовых блоков.
Также в JDK 23 будет представлена поддержка примитивных типов в шаблонах, instanceof и switch. Эта функция призвана улучшить сопоставление шаблонов, позволяя использовать шаблоны примитивных типов во всех контекстах шаблонов, а также расширить функции instanceof и switch для работы со всеми примитивными типами. Среди целей - предоставление простых в использовании конструкций, устраняющих риск потери информации из-за небезопасного приведения; согласование типов шаблонов с instanceof; согласование instanceof с безопасным приведением; обеспечение единообразного исследования данных за счет разрешения шаблонов типов для всех типов, будь то примитивные или ссылочные типы; разрешение шаблонам использовать все шаблоны примитивных типов во вложенных контекстах и контекстах верхнего уровня; и следование усовершенствованиям switch в Java 5 (enum switch) и Java 7 (string switch) для обработки значений любого примитивного типа.
Шаблоны строк, которые были предварительно представлены в JDK 22 и JDK 21, были исключены из рассмотрения для JDK 23. Эта функция должна была дополнить строковые литералы и текстовые блоки Java, соединяя литеральный текст и встроенные выражения для получения специализированных результатов. Сообщество OpenJDK посчитало, что эта возможность «не тянет на себя» и что дальнейшая оценка и возможная переработка потребуют времени.
Oracle также объявила о том, что JDK 23 поддерживается недавно выпущенным Java Management Service 9.0. JMS 9.0 - это собственный сервис Oracle Cloud Infrastructure (OCI), который предоставляет унифицированную консоль и панель управления для управления Java-исполнителями и приложениями в локальной сети или в любом облаке.
Oracle также раскрыла планы по развитию Java в 2024 году. Компания рассказала об усовершенствованиях, связанных с проектами OpenJDK, начиная с Amber, предназначенного для разработки небольших функций, ориентированных на производительность, и Babylon, предназначенного для расширения Java на иностранные модели программирования, такие как GPU, и Valhalla, предназначенного для дополнения объектной модели Java объектами значений для устранения давно существующих узких мест в производительности.
Понравилась новость? Тогда не забудь оставить свой комментарий.
А так же, добавь наш сайт в закладки (нажми Ctrl+D), не теряй нас.
Комментарии