Как установить максимальное использование памяти для JVM?
Я хочу ограничить максимальный объем памяти, используемый JVM. Обратите внимание, что это не просто куча, я хочу ограничить общий объем памяти, используемый этим процессом.
5 ответов
Использовать аргументы -Xms<memory>
-Xmx<memory>
, использование M
или же G
после чисел для обозначения мегабайт и гигабайт байтов соответственно. -Xms
указывает на минимум и -Xmx
максимум.
Вам не нужно беспокоиться об утечке памяти в стеке (это очень редко). Единственный раз, когда вы можете получить контроль над стеком, это бесконечная (или действительно глубокая) рекурсия.
Это просто куча. Извините, сначала не прочитал ваш вопрос полностью.
Вам нужно запустить JVM со следующим аргументом командной строки.
-Xmx<ammount of memory>
Пример:
-Xmx1024m
Это позволит максимально 1 ГБ памяти для JVM.
Если вы хотите ограничить память для jvm (не размер кучи), ulimit -v
Чтобы понять разницу между jvm и кучей памяти, взгляните на эту замечательную статью http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the-java-process.html
Ответ выше является своего рода правильным, вы не можете изящно контролировать, сколько собственной памяти выделяет Java-процесс. Это зависит от того, что делает ваше приложение.
Тем не менее, в зависимости от платформы, вы можете использовать какой-то механизм, например ulimit, для ограничения размера Java или любого другого процесса.
Только не ожидайте, что он изящно провалится, если достигнет этого предела. Собственные ошибки выделения памяти обрабатывать гораздо сложнее, чем ошибки выделения в куче Java. Существует довольно высокая вероятность того, что приложение рухнет, но в зависимости от того, насколько важно для системы сохранить размер процесса, который все еще может вас устраивать.
NativeHeap может быть увеличен на -XX:MaxDirectMemorySize=256M (по умолчанию 128)
Я никогда не использовал это. Может быть, вы найдете это полезным.