jmap帮助显示:
..。
-dump:要将java堆转储为hprof二进制格式的转储选项:只有动态转储活动对象;如果没有指定,堆中的所有对象都会被转储。 ..。
一旦我转储了Tomcat (使用java param -Xmx384m)堆:
jmap -dump:file=dump.bin <pid>我有一个大约300米的转储文件。
当我仅使用活动对象转储它的堆时:
jmap -dump:live,file=live-dump.bin <pid>我有一个120米的转储文件。
我对活物体的猜测可能是:
哪一个是对的?
更新
我的猜测2似乎是正确的,感谢Alexey的解释(live选项将导致一个完整的GC)。根据他的提示,我再次测试了一下:
jmap -dump:file=dump.hprof <pid>
jmap -dump:live,file=live-dump.hprof <pid>
jmap -dump:file=after-live-dump.hprof <pid>这3个文件的大小如下:
dump.hprof ~190MB
live-dump.hprof ~40MB
after-live-dump.hprof ~40MB因此,在-dump:live之后,堆中的几乎所有对象都是活动的。
发布于 2019-04-03 17:58:59
jmap -dump:live,file=live-dump.bin <pid>
jmap命令中的live选项强制JVM在将堆的内容转储到文件之前执行完整的GC操作。
在完成完GC之后,只有从GC根(“live”的定义)可以传递到的对象才会留在堆中。
https://stackoverflow.com/questions/55496429
复制相似问题