JMX(Java Management Extensions) getCollectionTime方法如何计算GC耗时?

在JAVA中,可以通过JMX接口管理、监控正在运行的程序。

可以通过JMX开放的功能,获取程序GC的情况,如下:

public class TestJMX {
    public static void main(String[] args) {
        List<GarbageCollectorMXBean> garbageCollectorMXBeanList = ManagementFactory.getGarbageCollectorMXBeans();
        for (final GarbageCollectorMXBean garbageCollector : garbageCollectorMXBeanList) {
            System.out.println("name:" + garbageCollector.getName());
            System.out.println("CollectionCount:" + garbageCollector.getCollectionCount());
            System.out.println("CollectionTime" + garbageCollector.getCollectionTime());
        }
    }
}

首先通过ManagementFactory.getGarbageCollectorMXBeans()方法获取所有的GC场景。

其中比较重要的是,可以通过getCollectionTime方法获取本次GC的耗时。

对于Young GC,整个过程都STW,可以认为方法返回的时间就是整个YGC的时间。

而对于老年代,一般使用CMS GC,在CMS过程中,有大量并发的过程,真正STW的阶段只有initial mark和remark阶段。

请问,对于CMS GC,getCollectionTime方法返回的时间是initial mark和remark阶段耗时之和么?

阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题