Совместное использование Java HotSpot (TM) без совместного использования

Я смотрел на свои установки JDK, и я видел разницу между двумя установками:

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)

против

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode, sharing)

И мне было интересно, какая разница между состоянием sharing и not sharing.

Я не мог найти хорошего ответа, кроме "разницы в скорости", но никаких объяснений о том, почему это происходит.

Ответ 1

Это называется Class Data Sharing, как описано здесь; это работает только для Client VM.

В основном это способ ускорить время запуска виртуальной машины - анализируемые классы хранятся в файле, а когда начинается виртуальная машина, он просто считывает этот файл (с уже скомпилированными классами), он также может совместно использовать другие запущенные виртуальные машины.

Строка shared будет содержать файл jre\bin\client\classes.jsa, а другой - нет.

Так как java-8 вы можете добавить свои собственные классы в этот файл - если я правильно помню, и собственный код (а не байтовый код) будет доступен для захватов.

Я не использовал Client VM с этой поддержкой - просто прочитайте об этом.