GarbageCollectorMXBean Full GC CollectionCount和CollectionTime

时间:2012-06-18 08:38:55

标签: java garbage-collection visualvm

我使用GarbageCollectorMXBean来获取JVM Full GC CollectionCount 和CollectionTime。但数据与数据不相等 由jstat收集(但VisualVM的数据与jstat相同)。

因此,我查看VisualVM源代码,研究它是如何工作的并且已经看到了 VisualVM也可以通过GarbageCollectorMXBean来收集JVM完整的GC 数据。  为什么呢?

我为java应用程序添加了gc log(部分JVM参数是-XX:+ PrintGCDetails -verbose:GC -Xloggc:/home/yubaofu/work/debug/gc.log)。我读了gc日志,看到完整的gc CollectionCount不等于jstat显示的数据。这是否意味着jstat full gc不仅仅是完整的gc?

visualVm vs jstat
 visualVm full gc是4
 jstat是全gc也是4

enter image description here

jconsole vs jstat
jconsole full gc是2
  jstat full gc是4

enter image description here

为什么不等于?

gc log vs jstat
 gc log full gc是2
 jstat full gc是4  enter image description here

我很抱歉我的英语很差,希望你能明白我的意思:)。

1 个答案:

答案 0 :(得分:0)

看起来您正在比较代表不同事物的数据。

首先,GarbageCollectorMXBean.getCollectionCount返回给定GC的“已发生的集合总数”。这意味着您将获得Young GC和旧GC的总数,而不一定是Full GC的数量。特别是如果您使用的是CMS。

您正在使用CMS-initial-mark,这绝对不是Full GC。在您的情况下,完整的GC将调用System.gc(),ParNew升级失败或并发模式失败。否则,您只需查看CMS周期数。

最后,我认为VisualVM使用SA代理获取更多信息,而JConsole仅使用MX Beans。所以你不会得到相同的数据。