Как ограничить использование памяти Java-приложением, упакованным в банку (-Xmx, похоже, не работает) в Windows - PullRequest
5 голосов
/ 18 сентября 2009

Я бы хотел ограничить максимальный размер кучи для приложения Java, но, похоже, он не работает. Я запускаю приложение из пакета jar через bat в Windows. Содержание летучей мыши:

@Echo off
set CLASSPATH=.
java -Xmx32m -classpath %CLASSPATH% -jar MyApplication.jar

Это должно ограничить максимальный размер кучи 32 мегабайта. Тем не менее, когда я делаю вещи, использующие память с приложением, диспетчер задач Windows показывает, что потребление памяти составляет не менее примерно 70 мегабайт ... Я даже пытался использовать -Xmx2m, но это не имело никакого значения.

Итак, я не совсем уверен, в чем проблема. Конечно, в памяти используется стек и т. Д., Но память, используемая программой, должна в основном занимать кучу места ...

Java-версия выглядит как 1.6.0_14.

Для тех, кто интересуется тем, что мне нужно, я пытаюсь увидеть, как мое приложение будет вести себя с определенными функциями, когда ему не хватает места в куче.

РЕДАКТИРОВАТЬ: Хм .. Я был удивлен, что использование кучи было ограничено 32M на самом деле при мониторинге с JConsole . Нужно использовать больше памяти ...

Спасибо за идеи, Ток

Ответы [ 6 ]

5 голосов
/ 18 сентября 2009

Ммм ... это не совсем так.

Хотя существует связь между -Xmx32m и тем, что вы видите в диспетчере задач, это не один-к-одному. Поймите, что диспетчер задач сообщает не о размере вашей кучи, а о всей памяти, используемой JVM, из которой ваш код является только подмножеством.

5 голосов
/ 18 сентября 2009

Я не думаю, что TaskManager показывает память кучи специально. Включает всю память, используемую программой в данный момент.

Для анализа памяти кучи можно использовать профилировщик (например, Yourkit) и посмотреть, соблюдается ли ограничение кучи -Xmx или нет. Это также поможет вам проанализировать интересующие вас части программы.

3 голосов
/ 18 сентября 2009

Вы видите сумму размера кучи и постоянной генерации. Вы можете настроить размер перми с помощью аргумента командной строки -XX: MaxPermSize. Например, для этого будет установлено значение 128 м.

java -Xmx32m -XX:MaxPermSize=128m ...
2 голосов
/ 18 сентября 2009

Попробуйте установить -Xmx128 и посмотреть, получите ли вы ошибку OutOfMemoryError. Это должно затем подтвердить, что это по крайней мере устанавливается.

0 голосов
/ 03 июня 2011

Необходимо учитывать различные моменты, которые могут минимизировать использование памяти программой.

Вот довольно хороший список от IBM. Время от времени я находил это очень удобным.

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rprf_javamemory.html

0 голосов
/ 18 сентября 2009

Возможно, вы не используете столько памяти, но JVM использует внешние библиотеки и все такое.

Для проверки этой теории вы можете использовать класс Runtime для просмотра общего объема памяти и используемой памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...