То, как ограничить использование памяти JAVA-приложения, упакованного в банке (-Xmx, кажется, не работает) в Windows

Я хотел бы ограничить максимальный размер "кучи" для JAVA-приложения, но это, кажется, не работает. Я запускаю приложение от пакета банки до летучей мыши в Windows. Bat содержание:

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

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

Так, я не полностью уверен, какова проблема. Существует, конечно, стек, и т.д. содержавшийся в использовании памяти, но память, используемая программой, должна быть главным образом пространством "кучи"...

Версия Java, кажется, 1.6.0_14.

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

Править: Хм.. Я был удивлен, что использование "кучи" было ограничено 32M на самом деле при контроле с JConsole. Должен получить больше используемой памяти...

Спасибо за идеи, Touko

5
задан Touko 18 September 2009 в 11:09
поделиться

5 ответов

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

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

5
ответ дан 18 December 2019 в 11:59
поделиться

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

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

5
ответ дан 18 December 2019 в 11:59
поделиться

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

java -Xmx32m -XX:MaxPermSize=128m ...
3
ответ дан 18 December 2019 в 11:59
поделиться

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

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

0
ответ дан 18 December 2019 в 11:59
поделиться

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

2
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: