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

Next »

New Features in Java 10

« Previous

Java 10 LocalVariable Type-Inference