максимальный размер кучи Java и максимальный вывод ОС - PullRequest
3 голосов
/ 10 января 2012

Я пытаюсь запустить файл jar, но я хочу обработать максимальный размер кучи jvm. Размер Я использую параметр -Xmx80m, чтобы установить максимальный размер головы 80 МБ.

Я использую команду "top" моей операционной системы linux для мониторинга распределения памяти моего приложения, и я удивлен, что jvm использует больше памяти, чем я указал в параметре -Xmx (java -Xmx80m -jar myapp.jar). Точнее из моего верхнего вывода

VIRT: 257 м
RES: 109 м

Я думаю, что RES должен быть на максимальных 80 МБ, и если моему приложению нужно больше, чем 80 МБ, jvm выбрасывает исключение "недостаточно памяти" (или что-то в этом роде)

В моем приложении я использую внешнюю библиотеку. Использует ли эта библиотека свою собственную память помимо кучи, которую я указал в параметре?

В любом случае, как я могу ограничить использование памяти jvm, чтобы не преодолеть то, что я установил с параметром?

Обновление:
Является ли хорошим решением использовать ulimit (команда unix) для ограничения ресурсов, используемых JVM?

Я использую:

Java-версия "1.7.0_02"
Java (TM) SE Runtime Environment (сборка 1.7.0_02-b13)
Серверная виртуальная машина Java HotSpot (TM) (сборка 22.0-b10, смешанный режим)

на федоре 8 шт

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Опция -mx или -Xmx устанавливает максимальный размер кучи. Эта виртуальная память выделяется при запуске и используется во время работы программы. Как отмечает @aix, памяти без кучи может быть больше.

Внешняя нативная библиотека будет использовать собственную память без кучи. Максимум ограничит кучу во всех библиотеках. (Его предварительно распределяют и не могут увеличить)

2 голосов
/ 10 января 2012

Не следует ожидать, что -Xmx наложит жесткие ограничения на общий объем памяти, используемой JVM.

-Xmx накладывает ограничение на размер кучи Java. Любая память вне кучи Java не подпадает под это ограничение. Это включает код, метаданные класса, пулы констант и т. Д.

Еще одна вещь, которую вы можете настроить, это размер постоянного пространства (-XX:MaxPermSize), так как он не включен в -Xmx.

...