Почему собственный образ GraalVM (SubstrateVM) использует гораздо меньше памяти во время выполнения, чем соответствующая сборка JIT?
Мне интересно, почему собственный образ GraalVM (SubstrateVM) Java-приложения заставляет его работать там, где поведение во время выполнения будет потреблять гораздо меньше памяти, но при нормальном запуске оно будет потреблять намного больше памяти?
И почему нельзя заставить обычную JIT аналогичным образом потреблять небольшой объем памяти?
1 ответ
Собственные образы GraalVM не включают JIT-компилятор или соответствующую инфраструктуру, поэтому нет необходимости выделять память для JIT, для внутреннего представления программы для JIT (например, граф потока управления), нет необходимости хранить некоторые метаданных класса и т. д.
Поэтому маловероятно, что JIT, которая действительно выполняет полезную работу, может быть реализована с такими же нулевыми накладными расходами.
Можно было бы создать экономичную реализацию виртуальной машины, которая, возможно, будет использовать меньше памяти, чем HotSpot. Особенно, если вы хотите измерить только конфигурацию по умолчанию, не сравнивая настройки, в которых вы контролируете объемы памяти, которые разрешено использовать JVM. Однако нужно понимать, что это будет либо постепенное улучшение существующих реализаций, либо выбор другого варианта для некоторого компромисса, потому что существующие реализации JVM действительно действительно хороши.