【发布时间】:2011-03-22 21:40:40
【问题描述】:
我只想找出 JVM 上次收集垃圾的时间。这可能吗?我怎样才能知道?
【问题讨论】:
我只想找出 JVM 上次收集垃圾的时间。这可能吗?我怎样才能知道?
【问题讨论】:
这应该让你开始:
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() 在记录当前时间的看门狗线程中的增加。
【讨论】:
最简单的方法是使用 -verbose:gc 启动 Java 应用程序,这会将有关垃圾收集的信息转储到标准输出:
java -verbose:gc MyProgram
【讨论】:
根据您运行的应用程序服务器,您可能会在管理控制台中获得所需的统计信息。垃圾收集统计数据通过 jmx 公开,几乎所有主要的应用程序服务器都有一个 jmx 控制台。否则我们可以使用 Jconsole 绑定到远程 jvm 并获取垃圾收集统计信息。 (连jconsole都会用到Jmx)
【讨论】: