Автор оригинала: Ganesh Pagade.
1. Обзор
В этом кратком руководстве мы обсудим улучшения производительности, которые появляются вместе с последним выпуском Java 10.
Эти улучшения применимы ко всем приложениям, работающим под управлением JDK 10, без необходимости каких-либо изменений кода, чтобы использовать их.
2. Параллельный полный GC для G1
Сборщик мусора G1 является сборщиком мусора по умолчанию с JDK 9. Однако полный GC для G1 использовал однопоточный алгоритм mark-sweep-compact.
Это было изменено на параллельный алгоритм mark-sweep-compact в Java 10, эффективно сокращающий время остановки во время полного GC.
3. Класс Приложения-Обмен Данными
Совместное использование данных классов, введенное в JDK 5, позволяет предварительно обработать набор классов в общий архивный файл, который затем может быть сопоставлен с памятью во время выполнения, чтобы сократить время запуска, что также может уменьшить объем динамической памяти, когда несколько JVM совместно используют один и тот же архивный файл.
Компакт-диски разрешали только загрузчик классов начальной загрузки, ограничивая эту функцию только системными классами. Компакт-диски приложений (APPCD) расширяют компакт-диски, позволяя встроенному загрузчику системных классов (он же “загрузчик классов приложений”), встроенному загрузчику классов платформы и пользовательским загрузчикам классов загружать архивированные классы. Это позволяет использовать эту функцию для классов приложений.
Мы можем использовать следующие шаги, чтобы использовать эту функцию:
1. Получите список классов для архивирования
Следующая команда сбросит классы, загруженные приложением Hello World , в hello.список :
$ java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst \ -cp hello.jar HelloWorld
2. Создайте архив компакт-дисков приложения
Следующая команда создает hello.js a с помощью привет.список в качестве входных данных:
$ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst \ -XX:SharedArchiveFile=hello.jsa -cp hello.jar
3. Используйте архив компакт-дисков приложения
Следующая команда запускает приложение HelloWorld с hello.jsa в качестве входных данных:
$ java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa \ -cp hello.jar HelloWorld
APPCD был коммерческой функцией в Oracle JDK для JDK 8 и JDK 9. Теперь он находится в открытом доступе и стал общедоступным.
4. Экспериментальный JIT-компилятор На Основе Java
Graal – это динамический компилятор, написанный на Java, который интегрируется с JVM HotSpot; он ориентирован на высокую производительность и расширяемость. Это также основа экспериментального компилятора AOT (AOT), представленного в JDK 9.
JDK 10 позволяет использовать компилятор Graal в качестве экспериментального JIT-компилятора на платформе Linux/x64.
Чтобы включить Graal в качестве JIT-компилятора, используйте следующие параметры в командной строке java:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
Обратите внимание, что это экспериментальная функция, и мы не обязательно получим лучшую производительность, чем существующие JIT-компиляторы.
5. Заключение
В этой краткой статье мы сосредоточились на функциях повышения производительности в Java 10 и изучили их.