Сегодня в свет вышла новая, 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-релизом, и у неё выйдет только два обновления.