У нас есть приложение Java, работающее в openjdk8, максимальная память кучи которого изменяется во время выполнения - в чем может быть причина этого?
Я нашел вопрос Почему куча меняется в java, который указывает на статья, объясняющая разницу между max
и committed
памятью. Кажется, что в нашем случае эти два обычно совпадают, но не всегда — см. 11:53 на скриншотах ниже.
Куча также может быть изменена серийным сборщиком молодого поколения (-XX:MaxHeapFreeRatio
, см. «>Поощрять JVM к GC, а не к увеличению кучи?), однако мы используем параллельный сборщик, так что это не тот случай.
Параметры JVM, связанные с памятью, с которыми мы запускаем приложение:
-XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m
Не уверен, что это связано, приложение выполняло параллельную развертку меток на старых поколениях между 11:55 и 11:58 — в это время было доступно более 200 МБ свободной памяти, и мы не видим причин для такого поведения.