java为什么jmap和jcmd生成的堆转储大小不同?
我尝试使用以下2个命令获取堆转储
- jcmd$pid GC。堆转储/tmp/filename。倾倒
- jmap-dump:format=b,file=/tmp/filename。转储$pid
jcmd产生约300M的文件大小,jmap产生约1.4G的文件大小。为什么这些尺寸不同,我们在jmap中有其他信息吗?我在jcmd中遗漏了一些参数吗
JDK是1.8.0_162
Xms和Xmx是4G
你可以在下面搜索框中键入要查询的问题!
我尝试使用以下2个命令获取堆转储
jcmd产生约300M的文件大小,jmap产生约1.4G的文件大小。为什么这些尺寸不同,我们在jmap中有其他信息吗?我在jcmd中遗漏了一些参数吗
JDK是1.8.0_162
Xms和Xmx是4G
# 1 楼答案
默认情况下(当没有提供[选项]时)
JMAP对所有对象进行了转储,JCMD只对活动对象进行了转储
使用JMAP命令: 使用此命令时,不需要指定任何内容,因为默认情况下,它会生成所有对象的堆转储。如果只需要活动对象,可以在JMAP中传递“-dump:live”选项
使用JCMD命令: 使用此命令时,必须通过-all选项。否则,它将请求一个完整的GC并只生成活动对象转储
JCMD——没有任何对象状态选项——默认情况下,它只转储活动对象
JMAP——没有任何对象状态选项——默认情况下会转储所有对象
有关更多信息,请参阅here