У меня есть настольное приложение java для поиска файлов, и оно обычно довольно скоро достигает предела кучи по умолчанию. У меня не будет доступа ко всем системам, в которых он будет установлен, поэтому я хочу увеличить размер кучи JVM в самом приложении. Может ли кто-нибудь помочь мне, как я могу сделать это программно в моем приложении
Как программно увеличить размер кучи java
Ответы (5)
Установка -Xmx на один гиг не означает, что JVM будет выделять столько памяти при запуске. JVM будет выделять только -Xms (плюс накладные расходы), пока не потребуется больше места в куче. Вам нужно защитить своих пользователей от перегрузки виртуальной памяти или сбоя выделения памяти из ОС? Если нет, просто установите для Xmx большое значение. Обратите внимание, что 32-битные JVM Windows часто игнорируют настройки Xmx, превышающие 1,2 ГБ, поэтому лучше не запрашивать больше гигабайта или около того, чтобы быть в безопасности.
Для этого нет такого стандартного API.
Я бы посоветовал вам использовать Java Web Start для вызова вашего приложения (может использоваться для локальных приложений в последней версии Sun Java 6), поскольку он позволяет вам указывать для этого значения.
Затем у вас может быть три или четыре ссылки, каждая из которых указывает на одни и те же файлы, но с размером кучи «Крошечный», «Средний», «Большой», «Гигантский».
См. Этот пост об увеличении размера кучи java:
постоянно увеличивать размер кучи java?
Возможно, вы также можете очистить какую-то часть вашего кода, чтобы уменьшить использование памяти.
Наилучшие пожелания
Взгляните на что-то вроде launch4j и подумайте о развертывании исполняемых файлов, где вы можете контролировать лимит, когда кто-то начинает запуск ваше приложение.
Вы не сможете сделать это программно.
Для настольных приложений я предлагаю предоставить средство запуска, которое затем может указать желаемый размер памяти. В дополнение к конфигурации вашей JVM вы также можете предоставить значок, ассоциации файлов и т. Д.
См. Этот вопрос SO для получения информации об альтернативах развертывания.