Как программно увеличить размер кучи java

У меня есть настольное приложение java для поиска файлов, и оно обычно довольно скоро достигает предела кучи по умолчанию. У меня не будет доступа ко всем системам, в которых он будет установлен, поэтому я хочу увеличить размер кучи JVM в самом приложении. Может ли кто-нибудь помочь мне, как я могу сделать это программно в моем приложении


person hrl    schedule 15.01.2010    source источник
comment
Почему бы вам не добавить какой-нибудь стартовый скрипт (bat или sh) с определенными стартовыми параметрами для jvm (например, Xmx) и не развернуть его вместе с самим приложением.   -  person Mirek Pluta    schedule 15.01.2010
comment
Какой смысл устанавливать лимит, если любое приложение может просто поднять его по своему желанию?   -  person Mirko N.    schedule 15.01.2010
comment
вы не можете программно изменить ограничения памяти в запущенном приложении   -  person    schedule 15.01.2010
comment
Для справки, вот RFE для точки доступа: bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408373   -  person Luke Quinane    schedule 21.05.2012
comment
возможный дубликат Может ли максимальный размер кучи JVM быть динамическим?   -  person Raedwald    schedule 22.11.2013
comment
Хотя это раньше, чем stackoverflow.com/questions/3472593/ на этот вопрос есть лучшие ответы.   -  person Raedwald    schedule 22.11.2013


Ответы (5)


Установка -Xmx на один гиг не означает, что JVM будет выделять столько памяти при запуске. JVM будет выделять только -Xms (плюс накладные расходы), пока не потребуется больше места в куче. Вам нужно защитить своих пользователей от перегрузки виртуальной памяти или сбоя выделения памяти из ОС? Если нет, просто установите для Xmx большое значение. Обратите внимание, что 32-битные JVM Windows часто игнорируют настройки Xmx, превышающие 1,2 ГБ, поэтому лучше не запрашивать больше гигабайта или около того, чтобы быть в безопасности.

person ShabbyDoo    schedule 15.01.2010
comment
32-битные JVM не будут игнорировать большие максимальные размеры кучи, вместо этого они не будут запускаться. Просто установите -mx1200m или аналогичный. (-mx работает так же хорошо, как -Xmx) - person Peter Lawrey; 16.01.2010

Для этого нет такого стандартного API.

Я бы посоветовал вам использовать Java Web Start для вызова вашего приложения (может использоваться для локальных приложений в последней версии Sun Java 6), поскольку он позволяет вам указывать для этого значения.

Затем у вас может быть три или четыре ссылки, каждая из которых указывает на одни и те же файлы, но с размером кучи «Крошечный», «Средний», «Большой», «Гигантский».

person Thorbjørn Ravn Andersen    schedule 15.01.2010

См. Этот пост об увеличении размера кучи java:

постоянно увеличивать размер кучи java?

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

Наилучшие пожелания

person madshiva    schedule 15.01.2010

Взгляните на что-то вроде launch4j и подумайте о развертывании исполняемых файлов, где вы можете контролировать лимит, когда кто-то начинает запуск ваше приложение.

Вы не сможете сделать это программно.

person Mark Elliot    schedule 15.01.2010

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

См. Этот вопрос SO для получения информации об альтернативах развертывания.

person Michael Brewer-Davis    schedule 15.01.2010