Компания Oracle объявила о выходе нового релиза платформы Java 16 (Oracle JDK 16), включающего 17 новых усовершенствований и обеспечивающего более высокую продуктивность разработки. В новом релизе Java Development Kit (JDK) финализированы функции Паттерн-матчинга для оператора 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 в компаниях всех размеров и индустрий.

«С выпуском нового релиза мы еще раз убедились в том, что график выхода обновлений раз в полгода удобен и эффективен, — отметил Жорж Сааб, вице-президент по разработке Java Platform Group, Oracle. — Паттерн-матчинг для оператора InstanceOf и Записи были впервые представлены год назад в релизе JDK 14 и с тех пор прошли несколько раундов тестирования и практического применения с обратной связью от сообщества. Этот процесс не только дал разработчикам Java возможность поэкспериментировать с функциями до финализации, но и дал возможность услышать критику. В результате были созданы два стабильных JEPа, которые действительно отвечают потребностям сообщества».

Релиз 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 остается одной из самых успешных платформ разработки. Платформа, базирующаяся на принципах постоянного потока инноваций, нацелена на требования и растущие потребности современных разработчиков приложений. Чтобы сделать подписку на Java SE Subscription еще более привлекательной для клиентов, Oracle добавила GraalVM Enterprise в качестве бесплатного элемента подписки. GraalVM может помочь повысить производительность и снизить потребление ресурсов, особенно в микросервисах и cloud native архитектурах. Компании, использующие Java по подписке Oracle Java SE, получают не только новейшие обновления и прямой доступ к к экспертам Oracle по Java, но и значительную экономию в сравнении с альтернативными подходами.

«Вместо того, чтобы каждые три или четыре года интересоваться тем, какие обновления появились в Java, я живу в другом, предложенном мне Oracle ритме, который позволяет оставаться активным разработчиком, преподавателем и инструктором, — отметил Хосе Помар, доцент Университета Сорбонна Париж Нор, и один из организаторов группы Paris Java User, — Я с интересом ожидал возможности пользоваться синтаксической конструкцией „Записи“, чтобы повысить производительность и читаемость моего кода обработки данных, после того как потестировал эту функцию в превью. И в новом релизе функция стала доступной для работы».