Почему существует разница в размере дампа кучи, сгенерированного jmap и jcmd?
Я пытаюсь взять дамп кучи, используя ниже 2 команды
- jcmd $ pid GC.heap_dump /tmp/filename.dump
- jmap -dump: format = b, file = / tmp / filename.dump $ pid
jcmd создает размер файла ~300M, а jmap - размер файла ~1.4G. почему это разные размеры, есть ли у нас какая-либо дополнительная информация в jmap? я пропускаю некоторые аргументы в jcmd?
JDK составляет 1.8.0_162
Xms и Xmx 4G
0 ответов
JMAP принял дамп всех объектов, а JCMD - только дамп живых объектов.
Использование команды JCMD: при использовании этой команды вы должны передать опцию -all. В противном случае он запросит полный GC и сгенерирует только дамп живых объектов.
Использование команды JMAP: при использовании этой команды вам не нужно ничего указывать, так как она по умолчанию создает дамп кучи всех объектов. Если вам нужны только живые объекты, вы можете передать опцию 'live' в JMAP.
JCMD - без каких-либо опций состояния объекта - по умолчанию он сбрасывает только живые объекты. JMAP - без каких-либо параметров состояния объекта - по умолчанию он сбрасывает все объекты.
Для получения дополнительной информации обратитесь сюда