为什么jmap和jcmd生成的堆转储大小不同?

时间:2018-08-28 08:33:13

标签: java java-8 heap-dump 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

1 个答案:

答案 0 :(得分:2)

JMAP进行了所有对象转储,而JCMD进行了唯一的活动对象转储。

使用JCMD命令:  使用此命令时,您必须传递-all选项。否则,它将请求完整的GC,并且仅生成活动对象转储。

使用JMAP命令:  使用此命令时,您无需指定任何内容,因为默认情况下会产生所有对象的堆转储。如果仅需要活动对象,则可以在JMAP中传递“活动”选项。

JCMD-没有任何对象状态选项-默认情况下,它仅转储活动对象。 JMAP-没有任何对象状态选项-默认情况下,它转储所有对象。

有关更多信息,请参见here