测量JVM中GC的时间

Mic*_*ael 11 java performance garbage-collection jvm qa

假设我正在测试Java服务器应用程序.我知道完成测试需要多长时间.现在,我想知道在测试期间在GC上花了多少钱.我该怎么做?

Ste*_*eod 22

我想当GC(垃圾收集器)工作时,应用程序停止并在GC完成时恢复

我不认为这是一个安全的假设.您确定垃圾收集器与您的应用程序代码并行工作吗?

要测量收集垃圾所花费的时间,您可以查询垃圾收集器MXBean.

试试这个:

public static void main(String[] args)  {
    System.out.println("collectionTime = " + getGarbageCollectionTime());
}

private static long getGarbageCollectionTime() {
    long collectionTime = 0;
    for (GarbageCollectorMXBean garbageCollectorMXBean : ManagementFactory.getGarbageCollectorMXBeans()) {
        collectionTime += garbageCollectorMXBean.getCollectionTime();
    }
    return collectionTime;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是超级的.我正在对GC执行许多测试,而且与JVM args写的日志相比,`GarbageCollectorMXBean`提供的值绝对相同. (3认同)

hvg*_*des 6

最简单的方法是在启动JVM时使用-Xloggc-XX:-PrintGCTimeStamps选项.我认为它打印出垃圾收集需要多长时间.

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html