Я наблюдаю за процессом JVM и замечаю, что каждый раз, когда я выполняю дамп кучи, он увеличивает размер выделенной кучи для этого приложения. Это, конечно, не ожидается, и это не то, что я хочу, когда я делаю дамп кучи. В чем причина и есть ли способ предотвратить это?
Например, если я проверяю jstat
перед дампом кучи, вот что я получаю:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
52224.0 54784.0 0.0 0.0 519680.0 396674.9 10765824.0 75678.9 65920.0 62151.2 8576.0 7827.8 8 0.057 7 1.776 1.832
Я делаю дамп кучи, используя jcmd
:
jcmd <pid> GC.heap_dump heap.bin
и снова проверьте jstat
, похоже, что выделенный размер кучи увеличился (глядя на столбец O C):
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
52224.0 54784.0 0.0 0.0 519680.0 45402.9 13836800.0 75711.1 65920.0 62168.7 8576.0 7830.9 9 0.060 8 1.944 2.004
Подтверждаю, что я вижу то же самое в Java VisualVM (каждый шаг) вверх после дампа кучи):
Я обнаружил, что могу получить дамп кучи без этого увеличения, когда использую команду jmap
без опция live
. Но почему это происходит в первую очередь?