«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 и рассмотрели их.