Анонсированный 25 сентября 2018 года, Java 11 является последним выпуском долгосрочной поддержки Oracle для сообщества Java. Ниже приведен список наиболее важных функций и изменений:
Вывод типа для лямбда-параметров
Ключевое слово var
было введено в Java 10 для реализации локальных переменных области видимости с динамическим выводом типов.
var aString = "This is a String";
В Java 11 ключевое слово var
может использоваться для определения данного лямбда-параметра
PredicatenotNull = (var u) -> u != null;
HTTP-клиент
Известно, что это инкубационная функция JDK 9. Это стандартный API для поддержки клиентов HTTP/1, HTTP/2, синхронных, асинхронных и в реактивно-функциональном стиле. Это иллюстрируется следующим кодом со страницы HTTP-клиента Oracle:
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://openjdk.java.net/")) .build(); client.sendAsync(request, asString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join();
TLS 1.3
Java 11 поставляется с реализацией протокола безопасности транспортного уровня (TLS) версии 1.3. TLS – это протокол для обеспечения защищенного обмена данными между двумя концами канала связи. Он определяет безопасный канал связи как имеющий эти 3 основных критерия:
- Идентификация
- Конфиденциальность
- Целостность
TLS 1.3 состоит из двух основных спецификаций:
- Установление связи, также известное как управление фазой рукопожатия, при котором два партнера согласовывают безопасность обмена с помощью обмена ключами и криптографических алгоритмов
- Фаза обмена данными, она же Протокол записи, где трафик рассматривается как передача записей, защищенных параметрами первой фазы.
Достаточно в качестве отступления, пожалуйста, смотрите ссылку в разделе Ссылки для получения дополнительной информации. Руководящий комитет JDK включил реализацию TLS 1.3 из-за его надежности в качестве протокола безопасности и для поддержания конкуренции с другими поставщиками, внедряющими его. Следуя этому примеру, реализация TLS включает различные криптографические алгоритмы для подписи и шифрования.
Функции, связанные с производительностью
JDK 11 уделяет большое внимание повышению производительности и инструментам. Учитывая тот факт, что сборка мусора является ключевым моментом для производительности Java, для GC были введены следующие функции:
ZGC
: несмотря на то, что ZGC является экспериментальным, он обещает низкую задержку (менее 10 мс) и широкий диапазон поддержки объема памяти (от сотен мегабайт до терабайт). Он доступен только для Linux x64.Epsilon GC
: щедрый GC, который выделяет память без ее восстановления. Полезно для тестирования производительности и недолговечных Java-процессов.
Инструменты производительности занимают львиную долю в этом выпуске:
Профилирование кучи с низкими накладными расходами
: предлагает ненавязчивый способ мониторинга распределения кучи памяти Java. На самом деле это программный собственный API, доступный для JVMTI (интерфейс инструментов JVM) для получения информации об объекте в куче.Java Flight Recorder
: важный инструмент для устранения неполадок и сбора данных с низкой производительностью. Он создает дамп данных, которые могут быть восстановлены с помощью Java Mission Control tool. В двух словах, мы запускаем инструмент в командной строке следующим образом
jcmdJFR.start
где pid
– идентификатор процесса уже запущенного java-приложения. Чтобы указать файл процесса дампа, в котором будет записываться состояние производительности приложения, используйте команду
jcmdJFR.dump filename=recording.jfr
Чтобы остановить запись, выполните команду
jcmdJFR.stop
и созданный файл может быть импортирован другими инструментами профилирования.
Устаревание и удаление некоторых функций из JDK
JavaFX больше не является частью JDK, это отдельная загрузка. Oracle прекратила предоставлять 32-разрядные двоичные файлы и автоматические обновления через сервер JRE. Удаляются следующие модули:
- Корба
- JAXP, JAXWS, JAF и общие аннотации
- Движок JavaScript Nashorn устарел
- Упаковочный костюм Java WebStart и Java-плагина
Для Corba и других модулей J2EE (таких как JAXB и JAX-WS) удаление было оправдано тем фактом, что они могут развиваться и поддерживаться вне сферы JDK, и синхронизировать изменения становится все сложнее и сложнее.
Незначительные особенности
С JDK 11 поставляется поддержка Unicode 10, что означает, что мы можем печатать смайлики. Еще одной особенностью является возможность выполнения отдельных java-файловых программ за один проход, вызывая
java OneClassFileProgram.java
вместо обычной последовательности (java, затем java). Под капотом нет файла класса на диске, все в памяти.
Рекомендации
- Главная страница: http://openjdk.java.net/projects/jdk/11
- Руководство по миграции Oracle: https://docs.oracle.com/en/java/javase/11/migrate/index.html
- HTTP-клиент Oracle: HTTP-клиент Oracle:
- TLS 1.3:
Оригинал: “https://dev.to/aymenmarouani/java-11-the-good-parts-548p”