Java VM может кучи стать меньше - PullRequest
3 голосов
/ 05 марта 2012

если я запускаю Java-программу, виртуальная машина изначально выделяет некоторую память для кучи, верно?

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

Возможно ли, что куча станет меньше, если использовать меньше памяти?

спасибо!

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Да, сборщик мусора может уменьшить размер кучи, если после нескольких сборок обнаружит, что приложение требует памяти меньше, чем настроенная куча. Вы можете наблюдать эту функцию в VisualVM, здесь стресс-тест экземпляра Tomcat с ab:

VisualVM memory

Как видите, размер кучи (оранжевая серия) меняется в основном после каждого GC (падение в синей серии). Иногда размер кучи увеличивается, иногда уменьшается. JVM может свободно регулировать размер в зависимости от фактического использования (здесь общий размер кучи был установлен на 1G).

0 голосов
/ 05 марта 2012

Итак, процесс Java начинается с начального выделения памяти для кучи и максимального выделения для указанной кучи. Это то, что вы пропускаете через аргументы командной строки -Xms и Xmx jvm. Они не могут измениться во время выполнения процесса.

Фактический объем памяти, используемый экземплярами вашего объекта, может уменьшиться после сборки мусора.

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