Как мы можем установить максимальный предел использования вне кучи в azul prime jvm

Мы используем azul prime, и он использует много памяти вне кучи. Есть ли какой-нибудь способ установить предел для памяти вне кучи, как мы даем для кучи?

2 ответа

Хотя мы не смогли найти способ ограничить использование вне кучи, проблема заключалась в компиляторе Azul falcon по умолчанию и его способе обработки динамической генерации кода. После включения KestralC2 в такой среде, где динамическая генерация кода огромна, мы решили проблему выхода памяти из кучи, выходящей из-под контроля.

Существует стандартный флаг JVM, который можно использовать для управления этим:-XX:MaxDirectMemorySize. Я проверил Prime JVM, и значение по умолчанию для него равно нулю, что соответствует значению для OpenJDK HotSpot. Ноль означает, что предела нет.

Однако я думаю, что вам нужно быть осторожным, меняя это, потому что это пространство не похоже на кучу (очевидно). Если вы ограничите размер кучи, ваше приложение все равно сможет (потенциально) продолжать работать, запуская сборщик мусора чаще. Память вне кучи не собирается автоматически; если вы сделаете значение меньше требуемого, вы приведете к резкой остановке вашего приложения.

Я бы рекомендовал выяснить, почему использование памяти вне кучи является высоким. Вероятно, это результат того, что делает ваше приложение, а не использования Prime JVM.

Единственное, что, по моему мнению, может вызвать это за пределами приложения, — это кеш для JIT-скомпилированного кода. Вы можете увидеть, сколько это стоит, добавив–XX:+PrintCodeCacheфлаг. Я думаю, что это вряд ли будет проблемой, поскольку обычно это будет порядка МБ, а не ГБ.

Другие вопросы по тегам