当前位置:  开发笔记 > 编程语言 > 正文

你能用Java获得基本的GC统计数据吗?

如何解决《你能用Java获得基本的GC统计数据吗?》经验,为你挑选了3个好方法。

我想让一些长期运行的服务器应用程序定期输出Java中的常规GC性能数字,比如相当于Runtime.freeMemory()的GC等等.完成循环次数,平均时间等.

我们有在客户机器上运行的系统,其中怀疑错误配置的内存池导致GC频率和长度过多 - 我发现定期报告基本GC活动会很好.

有没有平台独立的方法来做到这一点?

编辑:我特意想在运行时将此数据输出到系统日志(控制台); 这不是我想要连接到JVM的东西,就像JConsole或JVisualVM一样.

Edit2:MX bean看起来像我想要的 - 有没有人有一个工作代码示例获得其中一个?



1> Greg Case..:

这是一个GarbageCollectorMXBean用于打印GC统计数据的示例.据推测,您可以定期调用此方法,例如使用a调度ScheduledExecutorService.

public void printGCStats() {
    long totalGarbageCollections = 0;
    long garbageCollectionTime = 0;

    for(GarbageCollectorMXBean gc :
            ManagementFactory.getGarbageCollectorMXBeans()) {

        long count = gc.getCollectionCount();

        if(count >= 0) {
            totalGarbageCollections += count;
        }

        long time = gc.getCollectionTime();

        if(time >= 0) {
            garbageCollectionTime += time;
        }
    }

    System.out.println("Total Garbage Collections: "
        + totalGarbageCollections);
    System.out.println("Total Garbage Collection Time (ms): "
        + garbageCollectionTime);
}



2> Ran Biron..:

请参阅GarbageCollectorMXBean.



3> Michael Myer..:

尝试-XX:-PrintGC并且-XX:-PrintGCDetails; 请参阅VM调试选项.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有