Только что официально вышла новая, одиннадцатая версия Java. Скачать образы JDK можно либо в виде Oracle JDK под коммерческой лицензией, либо как OpenJDK с лицензией GPLv2. Различия между ними заключаются в том, что бесплатную версию Oracle JDK 11 можно легально использовать только для разработки, а OpenJDK можно использовать и в производственном целях.
Образы JRE не предоставляются. Для создания JRE пользователи теперь должны сами запускать утилиту jlink
.
Java 11, как и Java 10, это достаточно маленький (по количеству изменений) релиз, потому что после выхода предыдущей версии прошло всего полгода. Однако, в отличие от Java 10, этот релиз является Long Term Support, а значит, он будет поддерживаться как минимум до сентября 2022 года. К сожалению, бесплатные обновления Oracle будет выпускать только в течение полугода. Для получения дальнейших обновлений придётся либо заплатить, либо использовать альтернативные источники поддержки, например, AdoptOpenJDK, RedHat, Azul и т.д.
Вот список того, что было изменено и улучшено в Java 11:
- Удалены аплеты и Web Start, которые ранее в Java 9 были помечены как deprecated.
- JavaFX и Java Misssion Control теперь не поставляются вместе с JDK, а существуют как отдельные проекты.
- На Windows и macOS теперь нет автообновлений.
- Формат поставки для Windows сменился с tar.gz на zip.
- JEP 323: Local-Variable Syntax for Lambda Parameters. Теперь ключевое слово
var
можно использовать не только для объявления локальных переменных методов, но и для параметров лямбда-выражений. - JEP 320: Remove the Java EE and CORBA Modules. Модули JAX-WS, JAXB, JAF, Common Annotations, CORBA, JTA, которые ранее в Java 9 были помечены как deprecated for removal, теперь удалены окончательно. Вместо них теперь нужно использовать их аналоги из Maven. Также удалён модуль-аггрегатор
java.se.ee
. - JEP 321: HTTP Client (Standard). HTTP Client, который появился в Java 9 как инкубационный модуль, теперь стал стандартным модулем.
- JEP 328: Flight Recorder. Утилита Flight Recorder для диагностики и профилирования Java-приложений теперь стала общедоступной частью OpenJDK. Раньше её можно было использовать только на коммерческой основе.
- JEP 330: Launch Single-File Source-Code Programs. Исходные файлы Java теперь можно исполнять напрямую, без промежуточной компиляции.
- JEP 181: Nest-Based Access Control. Доступ между закрытыми членами вложенных классов теперь реализован на уровне JVM, а значит больше не нужна генерация синтетических методов доступа между ними.
- JEP 309: Dynamic Class-File Constants. Появился новый механизм
constantdynamic
(condy
), благодаря которому константными значениями теперь могут быть не только простые литералы, а более сложные динамические выражения произвольного типа. - JEP 318: Epsilon: A No-Op Garbage Collector. Появился новый сборщик мусора EpsilonGC, который занимается только выделением памяти, но не освобождает её. При достижении лимита памяти виртуальная машина останавливается.
- JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental). Появился новый сборщик мусора ZGC, который ставит своей задачей обеспечить маленькие паузы (< 10 мс) на всём диапазоне куч (от сотен мегабайт до нескольких терабайт), при этом издержки производительности не должны превышать 15%. Сборщик мусора имеет экспериментальный статус и работает только на Linux/x64.
Остальные JEP-ы:
- JEP 315: Improve Aarch64 Intrinsics.
- JEP 324: Key Agreement with Curve25519 and Curve448.
- JEP 327: Unicode 10.
- JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms.
- JEP 331: Low-Overhead Heap Profiling.
- JEP 332: Transport Layer Security (TLS) 1.3.
- JEP 336: Deprecate the Pack200 Tools and API.
- JEP 335: Deprecate the Nashorn JavaScript Engine.