有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我尝试使用以下2个命令获取堆转储

  1. jcmd$pid GC。堆转储/tmp/filename。倾倒
  2. jmap-dump:format=b,file=/tmp/filename。转储$pid

jcmd产生约300M的文件大小,jmap产生约1.4G的文件大小。为什么这些尺寸不同,我们在jmap中有其他信息吗?我在jcmd中遗漏了一些参数吗

JDK是1.8.0_162

Xms和Xmx是4G


共 (1) 个答案

  1. # 1 楼答案

    默认情况下(当没有提供[选项]时)

    JMAP对所有对象进行了转储,JCMD只对活动对象进行了转储

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

    使用JCMD命令: 使用此命令时,必须通过-all选项。否则,它将请求一个完整的GC并只生成活动对象转储

    JCMD——没有任何对象状态选项——默认情况下,它只转储活动对象

    JMAP——没有任何对象状态选项——默认情况下会转储所有对象

    有关更多信息,请参阅here