Сборщики мусора в HotSpot решают увеличить общий размер кучи сразу после завершения полного GC, если отношение свободного пространства к общему размеру кучи падает ниже определенного порога.Это соотношение можно настроить, используя один из многих параметров -XX для сборщика (ов) мусора.
Глядя на график памяти, вы увидите, что увеличение размера кучи происходит в «точках пилы»;т.е. локальные максимумы.Каждый из них соответствует запуску полного GC.Если вы внимательно посмотрите на «точки», где расширяется куча, вы увидите, что в каждом случае объем свободного пространства, следующего сразу за полным сборщиком мусора, немного выше, чем предыдущая такая «точка».
Я представляю, что происходит то, что использование памяти вашим приложением циклично.Если ГХ работает в верхней точке цикла или около нее, он не сможет освободить столько памяти, сколько ГХ работает в нижней точке или около нее.Этой изменчивости может быть достаточно, чтобы заставить ГХ расширять кучу.
(Другая возможность состоит в том, что ваше приложение имеет медленную утечку памяти.)
Это означает для долго работающего приложениячто он когда-нибудь исчерпает пространство кучи?
Нет.Предполагая, что использование памяти вашим приложением (т. Е. Интеграл пространства, занимаемого достижимыми объектами) является циклическим, размер кучи приблизится к фиксированному верхнему пределу и никогда не превысит его.Конечно, OOME не являются неизбежными.