Компания Oracle опубликовала Java SE 11
После шести месяцев разработки компания Oracle выпустила платформу Java SE 11 (Java Platform, Standard Edition 11), в качестве эталонной реализации которой используется открытый проект OpenJDK. В Java SE 11 сохранена полная обратная совместимость с прошлыми выпусками платформы Java, все ранее написанные Java-проекты без изменений будут работоспособны при запуске под управлением новой версии. Готовые для установки сборки Java SE 11 (JDK, JRE и Server JRE) подготовлены для Linux (x86_64), Solaris (SPARC), Windows и macOS. Разработанная в рамках проекта OpenJDK эталонная реализация Java 11 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.
Java SE 11 отнесен к категории выпусков с длительным сроком поддержки (LTS), обновления для которого будут выпускаться до 2026 года. Выпуск обновлений для прошлого промежуточного выпуска Java 10 прекращен. Прошлая LTS-ветка Java 8 будет поддерживаться до декабря 2020 года. Следующий LTS-релиз намечен на сентябрь 2021 года. Напомним, что начиная с прошло выпуска проект перешел на новый процесс разработки, подразумевающий более короткий цикл формирования новых релизов. Новая функциональность теперь развивается в одной постоянно обновляемой master-ветке, в которую включаются уже готовые изменения и от которой раз в шесть месяцев ответвляются ветки для стабилизации новых выпусков.
Из новшеств Java 11 можно отметить:
- Поддержка TLS 1.3 (RFC 8446), который отличается удалением устаревших и ненадежных криптографических примитивов (MD5, SHA-224) и возможностей (сжатие, повторное согласование, не-AEAD шифры, статический обмен ключами RSA и DH, указание unix-времени в Hello-сообщениях и т. п.), работает только в режиме forward secrecy (компрометации одного из долговременных ключей не позволяет расшифровать перехваченный сеанс), обеспечивает более высокую производительность, поддерживает режим 0-RTT (устраняет задержки при возобновлении ранее установленных HTTPS-соединений), поддерживает потоковый шифр ChaCha20, алгоритм аутентификации сообщений (MAC) Poly1305, ключи аутентификации на основе цифровых подписей Ed25519, HKDF (HMAC-based Extract-and-Expand Key Derivation Function), ключи на основе алгоритмов x25519 (RFC 7748) и x448 (RFC 8031);
- Стабилизирован новый API для разработки HTTP-клиентов, поддерживающий HTTP/2.0 и websockets. Новый HTTP Client API пришел на смену API HttpURLConnection.
- В состав включены инструментарии Java Mission Control (JMC) и Java Flight Recorder (JFR), который ранее поставлялся только для платных подписчиков. Инструментарий предоставляет средства для мониторинга, диагностики, профилирования и выявления утечек памяти. JFR позволяет получить доступ к детальной низкоуровневой информации о работе JVM и дает возможность эффективно анализировать текущие данные и произошедшие события без негативного влияния на производительность.
- Поддержка потокового шифра ChaCha20 и алгоритма аутентификации сообщений (MAC) Poly1305, разработанных Дэниелом Бернштейном (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 можно рассматривать, как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальных аппаратных ускорителей;
- Поддержка системы управления доступом Nestmate (Nest-based access controls), которая адаптирована для корректной обработки доступа с учетом вложенных типов. Nestmate обеспечивает возможность обращения к приватным частям внутри группы классов, логически относящимися к одному и тому же компоненту, но компилируемым в разные файлы с классами. Новый механизм управления доступом позволяет избавиться от необходимости подстановки компилятором специальных промежуточных методов обеспечения доступа;
- Формат файлов с классами Java (.class) расширен поддержкой динамически создаваемых констант (пул CONSTANT_Dynamic). Загрузка CONSTANT_Dynamic приводит к делегированию создания констант в метод bootstrap, по аналогии с тем, как в метод bootstrap делегируются операции связывания при вызове invokedynamic;
- Предложен экспериментальный сборщик мусора ZGC (Z Garbage Collector), работающий в пассивном режиме и насколько это возможно минимизирующий задержки из-за сборки мусора. Время остановки при использовании ZGC не превышает 10 мс. При этом ZGC может работать как небольшими, так и с огромными кучами, размером от нескольких сотен мегабайт до многих терабайт.