Релиз платформы Oracle JDK 16
Компания Oracle объявила о выходе нового релиза платформы Java 16 (Oracle JDK 16), включающего 17 новых усовершенствований и обеспечивающего более высокую продуктивность разработки. В новом релизе Java Development Kit финализированы функции паттерн-матчинга для оператора InstanceOf (JEP 394) и записи (JEP 395), синтаксические улучшения, впервые представленные как превью в Java 14. Кроме того, с выходом нового релиза разработчики могут использовать новый инструмент упаковки (JEP 392) для создания самодостаточных Java-приложений. Доступны для изучения три инкубационных модуля: инструментарий для преобразования векторных вычислений Vector API (JEP 338), инструментарий для статического доступа к нативному коду из Java Foreign Linker API (JEP 389) и API для доступа вне кучи Java (JEP 393), а также «запечатанные» классы, которые появились в Java 16 в режиме второго превью (JEP 397).
Oracle выпускает новые релизы Java каждые шесть месяцев, чтобы предоставить разработчикам четкий график. В процессе подготовки релиза Java 16, отмечают в компании, выходили регулярные обзоры и еженедельные промежуточные сборки. Интенсивное сотрудничество между разработчиками из Oracle и участниками сообщества из разных стран мира осуществлялось через OpenJDK Community и Java Community Process.
Новый функционал, доступный в релизе Java 16, включает:
• JEP 392: Packaging Tool – предоставляет инструмент jpackage для упаковки самодостаточных Java приложений;
• JEP 387: Elastic Metaspace – более оперативно возвращает неиспользуемую память метаданных класса HotSpot (metaspace) в ОС, сокращает объем метапространства и упрощает код метапространства, чтобы снизить затраты на обслуживание;
мJEP 376: ZGC: Concurrent Thread-Stack Processing – перемещает обработку стека потоков ZGC из safepoints в параллельную фазу. Это позволяет исключить последнее значимое узкое место для обеспечения одновременной обработки стека;
• JEP 394: Pattern Matching for instanceof – улучшает язык программирования Java за счет возможности паттерн-матчинга для оператора InstanceOf;
• JEP 395: Records – расширяет язык программирования Java с помощью записей, которые представляют собой классы, действующие как прозрачные носители неизменяемых данных. Записи можно рассматривать как номинальные кортежи;
• JEP 380: UNIX-Domain Socket Channels – в релизе добавлена поддержка сокетов доменов Unix в socket channel и server-socket channel API пакета java.nio.channels. Такие сокеты используются для межпроцессного взаимодействия внутри одного хоста, и в них не используются сетевые соединения, что делает такое взаимодействие более безопасным и эффективным. Они во многом похожи на сокеты TCP/IP, за исключением того, что к ним обращаются по путям файловой системы, а не по адресам Интернет-протокола (IP) и номерам портов;
• JEP 396: Strongly Encapsulate JDK Internals by Default – I В JDK 9 инкапсулировали новые внутренние элементы API, тем самым ограничив доступ к ним. Однако для облегчения перехода на момент выхода JDK 9 было принято решение не инкапсулировать так же строго во время выполнения содержимое пакетов, как это требовалось в JDK 8. В JDK 16 ограничение снова ужесточено, большинство внутренних элементов JDK инкапсулировано по умолчанию, за исключением критически важных внутренних API-интерфейсов, например, sun.misc.Unsafe. Пользователи по-прежнему могут выбрать упрощенную сильную инкапсуляцию, которая используется по умолчанию с момента выхода JDK 9. Это побудит разработчиков перейти от использования внутренних элементов к использованию стандартных API, чтобы и они, и пользователи могли без проблем перейти на будущие версии Java;
• JEP 390: Warnings for Value-Based Classes – классы-обертки примитивных типов теперь относятся к категории value-based классов, и их конструкторы, которые ранее стали deprecated в Java 9, теперь помечены как deprecated for removal. Предоставляет предупреждения о неправильных попытках синхронизации экземпляров любых value-based классов в платформе Java;
• JEP 338: Vector API (Incubator) – представляет собой начальную итерацию модуля инкубатора jdk.incubator.vector для преобразования векторных вычислений, которые надежно компилируются во время выполнения, в оптимальные векторные аппаратные инструкции на поддерживаемых CPU архитектурах;
• JEP 389: Foreign Linker API (Incubator) – API, предлагающий статический, более простой доступ из Java к нативному коду;
• JEP 393: Foreign-Memory Access API (Third Incubator) – API, позволяющий программам Java безопасно и эффективно обращаться к внешней памяти за пределами кучи Java;
• JEP 397: Sealed Classes (Second Preview) – улучшает язык программирования Java с помощью запечатанных классов и интерфейсов. Запечатанные классы и интерфейсы ограничивают возможность другим классам или интерфейсам расширять или реализовать их;
• JEP 347: Enable C++14 Language Features (in the JDK source code) – позволяет использовать функции стандарта языка C++14 в исходном коде JDK C++ и дает конкретные рекомендации о том, какие из этих функций могут использоваться в коде HotSpot;
• JEP 357: Migrate from Mercurial to Git – переносит репозитории исходного кода сообщества OpenJDK с Mercurial (hg) на Git;
• JEP 369: Migrate to GitHub – размещает Git репозитории сообщества OpenJDK на GitHub;
• JEP 386: Alpine Linux Port – портирует JDK на Alpine Linux и другие дистрибутивы Linux, которые используют musl в качестве основной библиотеки C, как для архитектуры x64, так и для архитектуры AArch64;
• JEP 388: Windows/Aarch64 Port – портирует JDK на Windows/AArch64.
Чтобы сделать подписку на Java SE Subscription более привлекательной для клиентов, Oracle добавила GraalVM Enterprise в качестве бесплатного элемента подписки. GraalVM может помочь повысить производительность и снизить потребление ресурсов, особенно в микросервисах и cloud native архитектурах. Компании, использующие Java по подписке Oracle Java SE, получают не только новейшие обновления и прямой доступ к к экспертам Oracle по Java, но и экономию в сравнении с альтернативными подходами.