Вышла Java 15

Сегодня в свет вышла новая, 15-я версия платформы Java.

Скачать JDK 15 можно по следующим ссылкам:

  • Oracle JDK (проприетарная версия, обратите внимание на ограничения в использовании).
  • OpenJDK (бесплатная версия)

В новый релиз попало 14 JEP'ов и сотни более мелких улучшений. Если хочется ознакомиться с полным списком изменений с точностью до всех JIRA-тикетов, то их можно посмотреть на сайте Алексея Шипилёва. Также если интересны все изменения API, то их можно посмотреть здесь.

Перечислим JEP'ы, которые попали в Java 15:

Язык

Блоки текста (JEP 378)

Блоки текста, которые появились в Java 13 и прошли два preview, теперь стали стабильной синтаксической конструкцией. Это значит, что в Java теперь две постоянные конструкции, которые появились с выхода Java 11: выражения switch и блоки текста.

Паттерн-матчинг для оператора instanceof (второе preview) (JEP 375)

Улучшенный оператор instanceof, который появился в Java 14, перешёл во второе preview без изменений. Напомним, что режим preview существует в Java для нововведений, которые находятся в предварительном статусе, т.е. могут измениться несовместимым образом или даже совсем исчезнуть, и для их включения необходим специальный флаг --enable-preview. Паттерн-матчинг для instanceof мы подробно рассматривали в этой статье.

Записи (второе preview) (JEP 384)

Записи, которые также появились в Java 14, тоже остались в режиме preview. Изменений по сравнению с прошлой версией немного: убрано ограничение, что канонический конструктор должен быть public, а также разрешены локальные перечисления и интерфейсы.

sealed классы (preview) (JEP 360)

В Java появилось языковое нововведение: «запечатанные» классы. Помечаются такие классы модификатором sealed, после чего круг классов, которые могут наследоваться от данного класса, становится ограниченным. sealed классы мы подробно рассматривали в этой статье.

JVM

ZGC (JEP 377)

ZGC, который появился в Java 11 в экспериментальном статусе, теперь официально готов к продуктовой разработке. Напомним, что ZGC – это сборщик мусора, который нацелен на маленькие паузы (< 10мс) и готовность работать в условиях огромных куч (> 1TB).

Shenandoah (JEP 379)

Shenandoah, ещё один низкопаузный сборщик мусора и конкурент ZGC, теперь также имеет статус готового к продуктовой разработке. Shenandoah впервые появился в Java 12. Также недавно стало известно, что Shenandoah был бэкпортирован в JDK 11, который является текущим LTS-релизом Java. Это значит, что чтобы его использовать, необязательно обновляться до JDK 15, а достаточно обновиться до JDK 11.0.9, которая выйдет 20 октября 2020 года.

Disable and Deprecate Biased Locking (JEP 374)

Biased Locking, который много лет существовал в JDK, было решено убрать из-за сложности поддержки и "неочевидных преимуществ" этой оптимизации. Начиная с этого релиза, опция -XX:+UseBiasedLocking отключена по умолчанию, а при её использовании и всех её связанных опций будет выдаваться предупреждение. Про мотивы отключения Biased Locking рассказал Сергей Куксенко в подкасте Hydra.

Удаление портов Solaris и SPARC (JEP 381)

Порты JDK на Solaris/SPARC, Solaris/x64 и Linux/SPARC, которые стали deprecated for removal в Java 14, теперь удалены окончательно. Удаление этих портов упростит и ускорит разработку JDK.

API

Скрытые классы (JEP 371)

Появился новый тип классов, называемых скрытыми. На скрытые классы не могут прямо ссылаться другие классы, и всё их использование может осуществляться только через рефлексию. Также их нельзя обнаружить по имени, и их методы не появляются в стек-трейсах. Создаются такие классы с помощью нового метода Lookup.defineHiddenClass().

Удаление движка JavaScript Nashorn (JEP 372)

Движок Nashorn, который стал deprecated for removal в Java 11, теперь удалён окончательно. В качестве замены Nashorn теперь придётся искать другой движок JavaScript, например, GraalVM JavaScript или Rhino.

Reimplement the Legacy DatagramSocket API (JEP 373)

Реализации старых сокетов из JDK 1.0 java.net.DatagramSocket and java.net.MulticastSocket были полностью заменены на более простые, современные и легкоадаптируемые к виртуальным нитям, которые планируется ввести в язык в рамках проекта Loom. Ранее в Java 13 были переписаны java.net.Socket и java.net.ServerSocket.

Foreign-Memory Access API (Second Incubator) (JEP 383)

API для доступа вне кучи Java, которое появилось в Java 14 в статусе модуля-инкубатора, остаётся в этом статусе.

Deprecate RMI Activation for Removal (JEP 385)

Устаревшая и малоиспользуемая часть RMI, которая называется RMI Activation, стала deprecated for removal.

Edwards-Curve Digital Signature Algorithm (EdDSA) (JEP 339)

Современный алгоритм с открытым ключом для создания цифровой подписи EdDSA реализован в Java.

Java 15, как и 12, 13, 14, является STS-релизом, и у неё выйдет только два обновления.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2020