jmap справка показывает:
...
-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
...
После сбросаTomcat (с параметром java -Xmx384m) куча:
jmap -dump:file=dump.bin <pid>
Я получил файл дампа ~ 300M.
Когда я сбрасываю его кучу только с live только объектами:
jmap -dump:live,file=live-dump.bin <pid>
Я получил файл дампа ~ 120M.
Мои предположения о живых объектах могут быть:
Объекты в молодом поколении;
Объекты, которые используются / ссылаются / достижимы и не будут собраны.
Какой из них правильный?
ОБНОВЛЕНИЕ
Мое предположение # 2 кажется правильным, и спасибо за объяснение Алексея Рагозина (опция live
вызовет полный сборщик мусора).Я снова проверил согласно его подсказке:
jmap -dump:file=dump.hprof <pid>
jmap -dump:live,file=live-dump.hprof <pid>
jmap -dump:file=after-live-dump.hprof <pid>
Размер этих 3 файлов:
dump.hprof ~190MB
live-dump.hprof ~40MB
after-live-dump.hprof ~40MB
, поэтому после -dump:live
почти все объекты в куче являются живыми.