Вышла общедоступная версия Java 14. Ссылки на скачивание:
В этот релиз попало 16 JEP'ов, а также сотни более мелких улучшений и тысячи исправлений багов. Список JEP'ов:
- Паттерн-матчинг для оператора
instanceof
(JEP 305) – улучшение оператораinstanceof
для поддержки паттерн-матчинга по типу. Его мы подробно рассматривали в этой статье. - Записи (Preview) (JEP 359) – новая синтаксическая конструкция в языке, которая позволяет объвлять классы-носители данных намного более компактно посредством нового ключевого слова
record
. Записи мы также рассматривали в отдельной статье. - Выражения
switch
(JEP 361) – улучшенный операторswitch
, который появился в Java 12 и был немного изменён в Java 13, теперь стал стабильной конструкцией и больше не требует preview-режима. - Блоки текста (второе Preview) (JEP 368) – новый вид строковых литералов, который появился в Java 13, теперь дополнен двумя новыми экранирующими последовательностями для продолжения строки и пробела. Конструкция пока ещё остаётся в preview-режиме.
- Полезные
NullPointerException
'ы (JEP 358) – улучшениеNullPointerException
, которое детально сообщает, что именно былоnull
. Включается с помощью ключа-XX:+ShowCodeDetailsInExceptionMessages
. - Инструмент упаковки (JEP 343) – новый инструмент
jpackage
для создания самодостаточных Java-приложений, который поддерживает нативные форматы упаковки. Пока предоставляется как инкубационный модуль. - ZGC на macos и Windows (JEP 364 и 365) – порт сборщика мусора ZGC, который был доступен только на Linux, на другие операционные системы. Сборщик мусора всё ещё находится в экспериментальном статусе.
- Удаление сборщика мусора CMS (JEP 363) – сборщик мусора Concurrent Mark Sweep, который стал deprecated в Java 9, теперь окончательно удалён.
- Deprecate the ParallelScavenge + SerialOld GC Combination (JEP 366) – комбинация флагов
-XX:+UseParallelGC -XX:-UseParallelOldGC
теперь стала deprecated. - NUMA-Aware Memory Allocation for G1 (JEP 345) – неравномерный доступ к памяти теперь поддерживается не только в ParallelGC, но и в G1.
- JFR Event Streaming (JEP 349) – предоставление возможности поглощения данных JDK Flight Recorder в непрерывном режиме. Это может быть полезно, например, в целях непрерывного мониторинга Java-процесса. Раньше данные можно было считывать только путём остановки записи, сохранения файла на диск и его последующего чтения.
- Non-Volatile Mapped Byte Buffers (JEP 352) – поддержка неволатильной памяти в
MappedByteBuffer
. Ранее в Java это было возможно лишь посредством внешних вызовов к системной библиотеке, написанной на C (например, libpmem). Однако такие вызовы стоят очень дорого, что делает Java плохо пригодной для написания транзакционных программ с персистестным состоянием. Новый же режим отображения вMappedByteBuffer
решает эту проблему. - Deprecate the Solaris and SPARC Ports (JEP 362) – порты JDK на Solaris/SPARC, Solaris/x64 и Linux/SPARC стали deprected for removal. Когда порты исчезнут окончательно, это упростит и ускорит разработку JDK.
- Remove the Pack200 Tools and API (JEP 367) – инструменты
pack200
иunpack200
, которые стали deprecated в Java 11, теперь удалены окончательно. - Foreign-Memory Access API (Incubator) (JEP 370) – долгожданное стандартное API для доступа к памяти вне кучи Java, которое разрабатывается в рамках проекта Panama. Это новое API не имеет ограничений, которые есть у direct
ByteBuffer
, более безопасно, чем нестандартныйsun.misc.Unsafe
и более эффективно, чем JNI (и без возни с кодом на C). Однако новое API ещё имеет экспериментальном статус, и поэтому находится в инкубационном модуле.
Java 14 не является LTS-релизом.