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