Почему JVM выделяет размер кучи после дампа кучи? - PullRequest
1 голос
/ 27 апреля 2020

Я наблюдаю за процессом 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 (каждый шаг) вверх после дампа кучи):

enter image description here

Я обнаружил, что могу получить дамп кучи без этого увеличения, когда использую команду jmap без опция live. Но почему это происходит в первую очередь?

...