1. Обзор
В этом кратком руководстве мы обсудим улучшения производительности, появившиеся в последней версии Java 10.
Эти улучшения применяются ко всем приложениям, работающим под управлением JDK 10, и для их использования не требуется никаких изменений кода.
2. Параллельный полный сборщик мусора для G1
Сборщик мусора G1 является сборщиком мусора по умолчанию, начиная с JDK 9. Однако полная сборка мусора для G1 использовала однопоточный алгоритм маркировки-очистки-уплотнения.
В Java 10 это было изменено на параллельный алгоритм пометки-очистки-уплотнения, эффективно сокращающий время остановки во время полного GC.
3. Совместное использование данных класса приложений
Совместное использование данных классов, представленное в JDK 5, позволяет предварительно обрабатывать набор классов в общий архивный файл, который затем может быть отображен в памяти во время выполнения, чтобы сократить время запуска, что также может уменьшить объем динамической памяти, когда несколько JVM совместно используют один и тот же файл. тот же файл архива.
CDS разрешал только загрузчик классов начальной загрузки, ограничивая эту функцию только системными классами. Application CDS (AppCDS) расширяет CDS, позволяя встроенному системному загрузчику классов (также известному как «загрузчик классов приложений»), встроенному загрузчику классов платформы и пользовательским загрузчикам классов загружать архивные классы. Это позволяет использовать функцию для классов приложений.
Мы можем использовать следующие шаги, чтобы использовать эту функцию:
1. Получить список классов в архив
Следующая команда выгрузит классы, загруженные приложением HelloWorld
, в hello.lst
:
$ java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst \
-cp hello.jar HelloWorld
2. Создайте архив AppCDS
Следующая команда создает hello.js,
используя в качестве входных данных hello.lst
:
$ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst \
-XX:SharedArchiveFile=hello.jsa -cp hello.jar
3. Используйте архив AppCDS
Следующая команда запускает приложение HelloWorld с
входными данными hello.jsa
:
$ java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa \
-cp hello.jar HelloWorld
AppCDS был коммерческой функцией в Oracle JDK для JDK 8 и JDK 9. Теперь он открыт и общедоступен.
4. Экспериментальный JIT-компилятор на основе Java
Graal — это динамический компилятор, написанный на Java, который интегрируется с HotSpot JVM; он ориентирован на высокую производительность и расширяемость. Это также основа экспериментального компилятора Ahead-of-Time (AOT), представленного в JDK 9.
JDK 10 позволяет использовать компилятор Graal в качестве экспериментального JIT-компилятора на платформе Linux/x64.
Чтобы включить Graal в качестве JIT-компилятора, используйте следующие параметры в командной строке java:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
Обратите внимание, что это экспериментальная функция, и мы не обязательно получим более высокую производительность, чем существующие JIT-компиляторы.
5. Вывод
В этой быстрой статье мы сосредоточились на функциях повышения производительности в Java 10 и изучили их.