Как уменьшить пространство кучи Java? [Дубликат]

На этот вопрос уже есть ответ:

Есть ли способ уменьшить кучу Java, когда она не используется? 7 ответов

У меня есть консольное приложение Java, которое обрабатывает большие XML-файлы с использованием DOM. По сути, он создает XML-файлы из данных, которые он берет из БД. Теперь, как вы предполагаете, он использует большой объем памяти, но, к моему удивлению, это связано не с плохим кодом, а с тем, что «пространство кучи Java не уменьшается». Я попытался запустить свое приложение из Eclipse, используя следующие параметры JVM:

-Xmx700m -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20

я даже добавил

-XX:-UseSerialGC

как я узнал, что параллельный GC игнорирует параметры «MinHeap» и «MaxHeap». Даже со всеми этими параметрами график использования памяти моего приложения выглядит следующим образом:

Как вы можете видеть, в какой-то момент мое приложение занимает ~ 400 МБ кучи, куча увеличивается до ~ 650 МБ, но спустя несколько секунд (когда генерация XML завершена) мое приложение уменьшается до 12 МБ используемой кучи, но "куча" размер "остается на уровне ~ 650 МБ. Требуется 650 МБ моего оперативной памяти! Это странно, не правда ли?

** Есть ли способ заставить JVS уменьшить доступный размер кучи, например, до 150% от текущей используемой кучи? ** Например, если моему приложению требуется 15 МБ ОЗУ, размер кучи составляет ~ 20 МБ, когда мое приложение запрашивает 400 МБ оперативной памяти, куча увеличивается до ~ 600 МБ, а падает до ~ 20 МБ, как только мое приложение завершает тяжелую операцию?

Ответы на вопрос(1)

Ваш ответ на вопрос