如何解释JProfiler中的GC Activity图?

Juh*_*uh_ 5 garbage-collection jprofiler

最近我一直在努力优化一些代码(需要计算时间和最大内存).要知道是否存在优化内存成本的潜在收益,我使用JProfiler.通常

  • 如果它很高,我应该尝试全局减少它
  • 如果它很尖刻,我应该尝试减少中间对象的创建

现在,我处于第二种情况,GC活动图显示了峰值,但都低于2%(见下图).我该怎么理解?

默认情况下,我的理解是GC活动曲线的总和/积分是用于收集数据的CPU总百分比的估计值.所以在这里意味着远远低于最大2%

这是正确的吗?我错过了什么吗?

在此输入图像描述

Ing*_*gel 5

默认情况下,我的理解是,GC 活动曲线的总和/积分是对用于收集数据的 cpu 总百分比的估计。所以这意味着远低于最大 2%

那是对的吗?

对,那是正确的。如果你想找出临时对象的分配位置,请进入Live Memory->Allocation Call Tree并选择“Garbagecollectedobjects”作为liveness模式

在此输入图像描述

要查看任何分配点或分配热点中的类,请使用“显示类”调用树分析。

在此输入图像描述


the*_*472 3

默认情况下,我的理解是,GC 活动曲线的总和/积分是对用于收集数据的 cpu 总百分比的估计。

应该是的,是的。

所以这意味着远低于最大 2%

max在这里是骗人的。如果您将采样间隔设置得足够小,则最大值将为 GC 所用时间片的 100%。即该切片小于 GC 暂停持续时间时。因此,这些峰值已经是一些较大时间片的平均值。

我该如何理解呢?

您的应用程序可能不会在 GC 上花费太多时间。但您的图表仅涵盖相对较小的时间,因此它可能无法反映主要集合或并发周期。如果您关心延迟而不仅仅是吞吐量,那么解释 JVM 的 GC 日志将提供更多详细信息。