Почему собственный образ GraalVM (SubstrateVM) использует намного меньше памяти во время выполнения, чем соответствующая сборка JIT? - PullRequest
1 голос
/ 06 апреля 2020

Мне интересно, почему собственный образ GraalVM (SubstrateVM) приложения Java заставляет его работать там, где поведение во время выполнения будет занимать гораздо меньше памяти, но при нормальной работе оно будет занимать намного больше памяти?

А почему нельзя заставить обычный JIT аналогично потреблять небольшой объем памяти?

1 Ответ

1 голос
/ 06 апреля 2020

Собственные образы GraalVM не включают в себя JIT-компилятор или связанную инфраструктуру - поэтому нет необходимости выделять память для JIT, для внутреннего представления программы для JIT (например, граф потока управления), нет необходимости для хранения некоторых метаданных класса, et c.

Таким образом, маловероятно, что JIT, который действительно выполняет полезную работу, может быть реализован с теми же нулевыми издержками.

Можно создать экономичную c реализацию виртуальной машины, которая, возможно, будет использовать меньше памяти, чем HotSpot. Особенно, если вы хотите измерить только конфигурацию по умолчанию, не сравнивая настройки, в которых вы контролируете объемы памяти, которые JVM может использовать. Однако нужно понимать, что это будет либо постепенное улучшение существующих реализаций, либо выбор другого варианта для некоторого компромисса, потому что существующие реализации JVM действительно очень хороши.

...