[Java] Систематизированный список всех функций Java и JVM в Java 8-15 (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Последнее обновление: 29.09.2020, вклющее изменения до JDK 15 .С момента выпуска версии 8 до версии 15 Java формируется 163 предложениями по расширению JDK (JEP), каждое из которых вносит некоторые улучшения в платформу. Эта страница представляет собой систематизированный и тщательно подобранный список наиболее важных улучшений.
Содержание
- Новые языковые функции
- Новые API
- Улучшения производительности
- Улучшения безопасности
- Изменения байт-кода
- Запуск
- Упаковка
- Javadoc
- Новые платформы
- Прекращение поддержки и удаление
- Схема новой версии
Полный список JEP можно найти на веб-сайте OpenJDK в проектах jdk и jdk9 .Все функции обычно доступны и включены по умолчанию, за исключением случаев, когда они помечены одним из следующих значений:
- Предварительный просмотр функции полностью определены и реализованы, но еще не считаются окончательными. Они считаются почти завершенными, ожидая дополнительного раунда реальных отзывов. Они должны быть явно включены .
- Экспериментальные функции менее стабильны и с большей вероятностью изменятся. Они также должны быть явно включены.
- Модули инкубатора не являются финальными инструментами и API и распределены в отдельных модулях .
Новые языковые функции Когда в Java 8 появились лямбды, это было довольно значительным изменением. Хотя последние версии не добавляли таких впечатляющих функций, в язык было внесено множество небольших улучшений.Вот краткий обзор того, что произошло за последние годы. Более подробное руководство см. В разделе Новые возможности языка, начиная с Java 8 .
- Текстовые блокиJDK 15 (предварительная версия в JDK 14 и JDK 13 )
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
- Запечатанные классы могут ограничивать, какие другие классы могут их расширять ( предварительная версия ) JDK 15
public abstract sealed class Shape
permits Circle, Rectangle {...}
public class Circle extends Shape {...} // OK
public class Rectangle extends Shape {...} // OK
public class Triangle extends Shape {...} // Compile error
// No need for default case if all permitted types are covered
double area = switch (shape) {
case Circle c -> Math.pow(c.radius(), 2) * Math.PI
case Rectangle r -> r.a() * r.b()
};
- Записи ( Превью)JDK 15 и JDK 14
record Point(int x, int y) { }
- Сопоставление с образцом для instanceof (Предварительный просмотр)JDK 15 и JDK 14
if (obj instanceof String s) {
System.out.println("obj is a String and it' length is " + s.length());
}
- Выражение переключателяJDK 14 (предварительная версия в JDK 12 и JDK 13)
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> {
String s = day.toString();
int result = s.length();
yield result;
}
};
- Полезные исключения NullPointerExceptions, точно описывающие, какая переменная была nullJDK 15 (Включено -XX:+ShowCodeDetailsInExceptionMessagesв JDK 14 )
a.b.c.i = 99;
---
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "c" because "a.b" is null
- Введение varчтобы сделать объявления локальных переменных менее церемоннымиJDK 11 (без поддержки лямбда в JDK 10 )
var greeting = "Hello World!";
- Подключаемая и обратно совместимая модульная система, позволяющая избежать исключения ClassDefNotFoundErrorsво время выполнения и создавать внутренние APIJDK 9 (Project Jigsaw)
module hu.advancedweb.helloworld {
requires hu.advancedweb.somedependency;
exports hu.advancedweb.hello
}
- Частные методы в интерфейсах
JDK 9 (Проект Milling Coin)
- Оператор Diamond для анонимных внутренних классов
JDK 9 (Проект Milling Coin)
- Try-with-resources позволяющая эффективно использовать final переменные
JDK 9 (Проект Milling Coin)
- @SafeVargsв методах частного экземпляра
JDK 9 (Проект Milling Coin)
- Нет предупреждений об устаревании для importоператоров
JDK 9
Новые APIДавайте продолжим со Стандартной библиотекой Java, сосредоточив внимание на новых функциях, которые мы можем использовать в повседневном кодировании.Если вам интересно узнать обо всех различиях уровней API между Java 8 и 14, посмотрите AdoptOpenJDK / jdk-api-diff на GitHub .Общее
- Поддержка неизменяемых сопоставленный с памятью байтовых буферов (Non-Volatile Mapped Byte Buffers) в API-интерфейсе FileChannel
JDK 14
- Files.mismatch: найти первый несовпадающий байт в содержимом двух файлов
JDK 12
- Collectors.teeingдля создания коллектора, который представляет собой смесь двух нижележащих сборщиков
JDK 12
- Улучшения строк: indentи transform
JDK 12
- Стандартный HTTP-клиент с поддержкой HTTP/2, WebSocket и неблокирующим APIJDK 11 ( Incubator в JDK 9 )
HttpClient httpClient = HttpClient.newBuilder().build();
HttpRequest request =
HttpRequest.newBuilder()
.uri(URI.create("https://advancedweb.hu/"))
.GET()
.build();
HttpResponse<String> response =
httpClient.send(request, BodyHandlers.ofString());
- Усовершенствования строк - методы: isBlank, lines, repeatи strip
JDK 11
- Методы фабрики удобства для коллекций, решающие проблему отсутствия литералов коллекцииJDK 9
Set<Integer> mySet = Set.of(1, 2, 3);
List<Integer> myList = List.of(1, 2, 3);
Map<String, Integer> myMap = Map.of("one", 1, "two", 2);
- Фреймвок публикации-подписки Reactive Streams для обработки асинхронных потоков с неблокирующим обратным давлением
JDK 9
- Связанные со временем улучшения CompletableFuture(тайм-аут, задержка)
JDK 9
- Больше возможностей для преобразования ( dropWhile, takeWhile) и генерации ( iterate, ofNullable) потоков; сборщики только для чтения ( toUnmodifiableList); опции могут быть преобразованы в потоки
JDK 9
- Arrays.mismatch: найти первый несовпадающий элемент между двумя массивами
JDK 9
- Stack-Walking API, который позволяет использовать ленивый подход и фильтрацию кадров
JDK 9
- API процессов предоставляет дополнительную информацию и контроль (например, идентификатор процесса, аргументы, время ЦП, родительские / дочерние процессы), а также улучшения ProcessBuilder помогающие создавать конвейеры процессов
JDK 9
- VarHandleAPI для замены операций, связанных с полями и массивами, java.util.concurrent.atomicи sun.misc.Unsafeдля обеспечения низкоуровневых механизмов доступа, например, атомарной записи.
JDK 9
- Новые комбинаторы и методы поиска для MethodHandle
JDK 9
- Расширенная политика устаревания. @Deprecatedможет быть отмечен значком forRemoval, который выдает новое предупреждение.
JDK 9
- OASIS Standard XML Catalog API для безопасного и производительного управления внешними ресурсами в XML
JDK 9
- Обновите анализатор XML JDK, Xerces, до версии 2.11.0
JDK 9
- Поддержка TIFF для Image I/O FrameworkJDK 9
Интернационализация
- Unicode 10.0, добавление примерно 27000 символов, 10 блоков и более 30 скриптов
JDK 11 (поддержка Unicode 8.0 в JDK 9 )
- java.util.Localeи связанные API поддерживают тип валюты, часовой пояс и многое другое.
JDK 10
- ResourceBundleзагружает файлы свойств в UTF-8 вместо ISO-8859-1
JDK 9
- Данные локали CLDR включены по умолчанию
JDK 9
Графика и настольные приложения
- Функции рабочего стола для всех платформ, такие как прослушиватель событий входа / вывода / блокировки и взаимодействие с панелью задач
JDK 9
- MultiResolutionImageкоторый упрощает получение изображения с определенным разрешением для DPI
JDK 9
- Графика HiDPI в Windows и Linux
JDK 9
- Включение GTK 3 в Linux для JavaFX, Swing и AWT
JDK 9
- Замена тегов Javadoc @beaninfoи @BeanInfoаннотациями для Swing
JDK 9
- Обновление GStreamer, включенннное в JavaFX / Media, до версии 1.4.4
JDK 9
- Замена существующего механизм компоновки шрифтов ICU OpenType на HarfBuzz
JDK 9
Улучшения производительностиОбщее
- API доступа к внешней памяти для безопасного и эффективного использования памяти вне кучи ( инкубатор )
JDK 15 JDK 14
- Включение динамическое архивирование классов в конце выполнения Java-приложения
JDK 13
- Совместное использование данных классов приложений для сокращения времени запуска и уменьшения занимаемой площади за счет обмена метаданными классов между процессами Java.
JDK 10
- Архив с совместным использованием данных классов для списка классов по умолчанию включен по умолчанию, чтобы сократить время запуска "из коробки"
JDK 12
- Компактные строки с компактным размером, более эффективно хранящие строки только для Latin-1
JDK 9
- Кеши кода профилированного и непрофилированного скомпилированного кода разделены, что приводит к повышению производительности и увеличению объема памяти
JDK 9
- Хранение интернированных строк в архивах совместного использования данных классов, чтобы уменьшить потребление памяти
JDK 9
Библиотека
- Улучшенные встроенные функции для java.lang.Math sin, cosи logфункции на процессорах AArch64
JDK 11
- Улучшения производительности Security Manager
JDK 9
- Spin-Wait Hint ( Thread#onSpinWait) для оптимизации циклов в стиле «занято-ожидание»
JDK 9
- Использование Marlin Renderer в Java 2D в качестве растеризатора графики по умолчанию вместо Pisces
JDK 9
- Повышена производительность GHASH и RSA за счет использования недавно представленных инструкций процессора SPARC и Intel x64
JDK 9.
Параллелизм
- Thread-Local Handshakes (Локальные рукопожатия потока) для остановки отдельных потоков
JDK 10
- Улучшена производительность мониторов конкурирующих объектов
JDK 9
- Дополнительное пространство в стеке потоков для критических секций, снижающее риск тупиковой ситуации при java.util.concurrentблокировках в случае переполнения стека
JDK 9
Компилятор
- Возможность предварительной компиляции для Linux ( экспериментальная )
JDK 10 (Graal как экспериментальный JIT-компилятор) JDK 9 (интерфейс JVM-компилятора) JDK 9 (Graal как AoT-компилятор)
- Повышение производительности в javac: новая стратегия проверки типов многоязычных выражений
JDK 9
Сборщик мусора G1 (по умолчанию)
- Распределение памяти с учетом NUMA
JDK 14
- Возможность прерывания смешанных коллекций для обеспечения поставленной пользователем паузы
JDK 12
- Автоматический возврат память кучи в операционную систему при простое
JDK 12
- Параллельный полный сборщик мусора для уменьшения задержек в худшем случае
JDK 10
- Сборщик мусора G1 теперь по умолчанию вместо Parallel GC
JDK 9
Другие сборщики мусора
- Z Garbage Collector, предлагающий очень малое время задержки для больших куч
JDK 15 ( экспериментальный в JDK 14 (Windows) JDK 14 (OS X) JDK 11 (Linux))
- Сборщик мусора Shenandoah, предлагающий те же преимущества, что и ZGC, но основанный на другом алгоритме
JDK 15 ( экспериментальный в JDK 12)
- Сборщик мусора Epsilon, который не реализует фактическое восстановление памяти, стремясь к минимально возможным накладным расходам
JDK 11
- XX:AllocateHeapAt=<path>для поддержки альтернативных устройств памяти
JDK 10
Диагностика и инструменты
- Потоковая передача событий Flight Recorder: данные профилирования доступны через API , что делает его пригодным для непрерывного мониторинга
JDK 14
- Microbenchmark Suite на основе JMH
JDK 12
- Flight Recorder является частью OpenJDK
JDK 11
- Профилирование кучи с низкими издержками через JMTI
JDK 11
- Управляемый во время выполнения и специфичный для метода контроль компиляторов C1 и C2, который позволяет включать тесты
JDK 9
- Детализированная, простая в настройке система ведения журнала для всех компонентов JVM
JDK 9 (унифицированное ведение журнала JVM) JDK 9 (унифицированное ведение журнала сборщика мусора)
- Разрешить приложению предоставлять реализацию системы журналирования для использования классами платформы
JDK 9
Улучшения безопасности
- Набор сертификатов корневого центра сертификации (CA) по умолчанию предоставляется с JDK, поэтому соединения TLS работают из коробки
JDK 10
- Валидация входящих данных сериализации
JDK 9
- Тип хранилища ключей по умолчанию - стандартный PKCS12 вместо проприетарного JKS
JDK 9.
- Основанный на DRBGSecureRandom
JDK 9 на
- Отключить цепочки сертификатов X.509 с подписями на основе SHA-1
JDK 9
- Хеш-алгоритмы SHA-3
JDK 9
TLS
- Поддержка TLS 1.3
JDK 11
- Datagram Transport Layer Security (DTLS) API
JDK 9
- OCSP сшивает TLS для улучшения производительности проверки статуса сертификата
JDK 9
- TLS Application-Layer Protocol Negotiation (ALPN) Extension, который обеспечивает согласование протокола без дополнительных циклов передачи; ALPN - требование для соединений HTTP/ 2
JDK 9
Крипто
- Алгоритм цифровой подписи по кривой Эдвардса (EdDSA) - RFC8032
JDK 15
- Ключевое соглашение с Curve25519 и Curve448
JDK 11
- Криптографические алгоритмы ChaCha20 и Poly1305
JDK 11
Запуск
- Запуск однофайловых программ с исходным кодом, включая поддержку shebang(#!) строки в Unix
JDK 11
- jshell: Java REPL
JDK 9 (Project Kulla)
→ Связано: Создание прототипов с помощью JShell
- Компиляция для Старых Версий платформы с --release, который конфигурирует --sourceи --targetи ссылок против соответствующей версии платформы
JDK 9
- Ранняя проверка флагов командной строки JVM во избежание сбоев
JDK 9
Упаковка
- Packaging Tool, поддерживающий собственные форматы пакетов: msi, exe, pkg, dmg, deb и rpm ( Incubator )
JDK 14
- jlinkКомпоновщик Java, который может создать оптимизированный тонкий образ времени выполнения для модульного приложения Java, который содержит только необходимые части JDK
JDK 9 - [ 2 ], [ 3 ], [ 4 ], [ 4 ], [ 5 ]
- Файлы JAR с несколькими релизами, позволяющие использовать несколько версий класса для конкретных релизов Java в одном архиве
JDK 9
Javadoc
- Инструмент Javadoc теперь генерирует разметку HTML5 вместо макета на основе фреймов, а документация содержит поле поиска для облегчения навигацииJDK 9 - [ 2 ], [ 3 ]
Байт-код
- Замена Unsafe::defineAnonymousClass()на Lookup::defineHiddenClass(), предназначенная для фреймворков для динамического создания скрытых классов, которые не могут быть обнаружены, связаны и использованы напрямую другими классами. JDK 15
- Пакет java.lang.invoke.constant, позволяющий легко описывать загружаемые константы (операнды для ldcинструкции), что менее подвержено ошибкам, чем использование специального строкового представления
JDK 12
- CONSTANT_Dynamicзапись постоянного пула, которая использует загрузку для выполнения разрешения, аналогично INVOKEDYNAMICвызовам
JDK 11
- Введение контекста управления доступом Nest, который объединяет классы в одну и ту же сущность кода - например, вложенные классы - и устраняет необходимость для компилятора вставлять методы моста в сгенерированный байт-код.
JDK 11
- Байт-код, созданный для статической конкатенации строк, использует invokedynamic вместо прямого создания StringBuilder#append цепочек. Это позволит в будущем оптимизировать конкатенацию строк без изменения байт-кода.
JDK 9
- INVOKEDYNAMIC может выражать высокоуровневые операции со свойствами объекта и / или коллекциями
JDK 9
Новые поддерживаемые платформы
Схема новой версии
Устаревание и удаление
- Удалена Nashorn Javascript Engine и jjsинструмент
JDK 15 (не рекомендуется в JDK 11 )
- Удалены порты Solaris и SPARC
JDK 15 (устарело в JDK 14 )
- Устарела активация RMI , влияющая на java.rmi.activationпакет и rmidинструмент, не влияет на Java RMI в целом
JDK 15
- Отключена предвзятая блокировка по умолчанию, исключены соответствующие флаги командной строки
JDK 15
- Устарела Unsafe::defineAnonymousClass()
JDK 15
- Удален сборщик мусора Concurrent Mark Sweep (CMS)
JDK 14
- Устарела комбинация ParallelScavenge + SerialOld GC
JDK 14
- Удалены инструменты Pack200 и API
JDK 14
- Устарели инструменты Pack200 и API
JDK 11
- Удалена Java EE
JDK 11
- Удалена CORBA
JDK 11
- Удалены Thread#destroyи Thread#stop
JDK 11
- varбольше не является допустимым именем класса
JDK 10
- Удален инструмент javah
JDK 10
- Подчеркивание больше не является действительным идентификатором
JDK 9
- Внутренние API ( sun.*) удалены или устарели
JDK 9 [ 2 ]
- Удален apple.applescriptи com.appleупакован
JDK 9
- Отключены цепочки сертификатов X.509 с подписями на основе SHA-1
JDK 9
- Удалить директивы выбора версии JRE при запуске: JRE-Versionзапись в манифесте и -version:параметр cli
JDK 9
- Удален инструмент jhat
JDK 9
- Удален JVM TI hprof Agent
JDK 9
- Удалены комбинации GC, устаревшие в JDK 8
JDK 9
- ResourceBundle загружает файлы свойств в UTF-8 вместо ISO-8859-1
JDK 9
- Устарело API апплета
JDK 9
- Устарела Concurrent Mark Sweep Garbage Collector
JDK 9
- Устарела Object.finalize()
JDK 9
- Удалены механизмы переопределения одобренных стандартов ( lib/endorsed) и расширений ( lib/ext) из JRE
JDK 9
- Удален rt.jarиз JRE
JDK 9
Если вам интересно узнать обо всех различиях API между Java 8 и 14, посмотрите сайт проекта Java Almanac . Также ознакомьтесь с jdeps , анализатором зависимостей классов Java, чтобы узнать, использует ли ваш проект старый внутренний API.РезюмеJDK 8 был выпущен в 2014 году. Нам пришлось ждать выхода JDK 9 три с половиной года . Но с тех пор дела пошли быстрее. У Java есть новая структура релизов, цель которой - выпускать новую версию каждые шесть месяцев.Хотя Java 8 все еще поддерживается, переход на последнюю версию вносит в таблицу значительное количество улучшений.
===========
Источник:
habr.com
===========
===========
Автор оригинала: Dávid Csákvári
===========Похожие новости:
- [Программирование, Учебный процесс в IT, Карьера в IT-индустрии, Конференции] Бесплатные онлайн-мероприятия по разработке (7 октября — 15 октября)
- [Java] Ведение журнала в Spring Boot (перевод)
- [JavaScript] Кастомные методы для массивов в JS
- [JavaScript, ReactJS] Новый механизм JSX трансформации в React 17 Release Candidate
- [JavaScript, Программирование, ReactJS] Как использовать Axios в React
- [Godot, Разработка игр] Механики для реализации платформера на Godot engine. 2 часть
- [PHP, Глобальные системы позиционирования, JavaScript, Геоинформационные сервисы] Как высчитать ключи перехода от лобой системы координат к WGS с сантиметровой точностью?
- [Разработка игр, Godot] Механики для реализации платформера на игровом движке GodotEngine
- [Java, Карьера в IT-индустрии, Статистика в IT] Статистика зарплат Java-разработчиков: максимальные ожидания от зарплат в Москве, а джунам платят меньше всего в Самаре
- [Программирование, Проектирование и рефакторинг, Управление проектами] Что такое SDLC? Этапы, методология и процессы жизненного цикла программного обеспечения (перевод)
Теги для поиска: #_java, #_java, #_programmirovanie (программирование), #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:52
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Последнее обновление: 29.09.2020, вклющее изменения до JDK 15 .С момента выпуска версии 8 до версии 15 Java формируется 163 предложениями по расширению JDK (JEP), каждое из которых вносит некоторые улучшения в платформу. Эта страница представляет собой систематизированный и тщательно подобранный список наиболее важных улучшений. Содержание
=========== Источник: habr.com =========== =========== Автор оригинала: Dávid Csákvári ===========Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 19:52
Часовой пояс: UTC + 5