2011-03-22 78 views

回答

3

最简单的方法是开始你-verbose Java应用程序:GC,这将倾倒垃圾回收到stdout信息:

的java -verbose:GC MyProgram

+0

谢谢。我会记住这一点,但这不是我正在运行的应用程序服务器上的一个选项。我想以编程方式进行。 – JavaRocky 2011-03-22 21:57:42

+0

声音你需要与调试体系结构一起玩:http://download.oracle.com/javase/6/docs/technotes/guides/jpda/index.html - 虽然我没有任何实际的知识。 – JenEriC 2011-03-22 22:03:41

7

这应该让你开始:

import java.lang.management.GarbageCollectorMXBean; 
import java.lang.management.ManagementFactory; 


    for (GarbageCollectorMXBean gcBean : ManagementFactory.getGarbageCollectorMXBeans()) { 
     System.out.println(gcBean.getCollectionCount()); 

     com.sun.management.GarbageCollectorMXBean sunGcBean = (com.sun.management.GarbageCollectorMXBean) gcBean; 
     System.out.println(sunGcBean.getLastGcInfo().getStartTime()); 
    } 

对sunGcBean的强制转换可能不能移植到非Sun JVM。您可以找到目标VM的特定于供应商的扩展,或者在看门狗线程中观察gcBean.getCollectionCount(),该线程记录当前时间发生变化。

1

根据您正在运行的应用程序服务器,您可能会在管理控制台中获得您要查找的统计信息。垃圾收集统计信息通过jmx公开,几乎所有主要的应用程序服务器都有一个jmx控制台。否则,我们可以使用Jconsole绑定到远程jvm并获取垃圾收集统计信息。 (即使jconsole将使用Jmx)