CMS GC - 如何分析年轻一代堆?

CMS GC - How to profile young gen heap?

我可以使用 jmap 命令转储 JVM 内存堆。

问题是,当从 GC 日志中检查时,我有一个程序与以前的版本相比具有更重的新生代 GC 活动,并且当我 运行 内存分析器时,最大的对象总是在老一代因此,当您需要查找年轻代 GC 中存在的泄漏时,这会使故障排除变得更加困难。

有什么方法可以分析年轻代堆中的内存吗?

更新: 我用的是open JDK 1.8.

JVM 的分析接口不提供特定于 GC 的信息,因此分析器无法告诉您对象处于哪个 GC 世代。

但是,一些剖析器能够记录对象的年龄(有效地生成它们自己的“世代”),因此您可以将分析限制在较年轻的对象上。 JProfiler,例如有一个标记堆中所有对象的“设置标记”操作。

创建堆转储后,您可以 select 调用标记操作后创建的对象。

如果您选择记录分配时间,您可以在堆遍历器的“时间”视图中select以任意时间间隔创建的对象。

免责声明:我公司开发JProfiler