Почему существует разница в размере дампа кучи, сгенерированного jmap и jcmd?

Я пытаюсь взять дамп кучи, используя ниже 2 команды

  1. jcmd $ pid GC.heap_dump /tmp/filename.dump
  2. 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 - без каких-либо параметров состояния объекта - по умолчанию он сбрасывает все объекты.

Для получения дополнительной информации обратитесь сюда

Другие вопросы по тегам