完整GC是否意味着runFinalization()

时间:2014-07-01 23:50:05

标签: java garbage-collection

我需要一个干净的实时对象堆转储。我目前正在使用HotSpotDiagnosticMXBean来进行堆转储:

final String DIAGNOSTIC_MBEAN_NAME = "com.sun.management:type=HotSpotDiagnostic";
final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
diagnosticMBean = ManagementFactory.newPlatformMXBeanProxy(server, DIAGNOSTIC_MBEAN_NAME, HotSpotDiagnosticMXBean.class);
diagnosticMBean.dumpHeap(fileName, true);

此方法首先通过调用完整的GC来获取活动对象。但是,偶尔,当我在YourKit中分析堆转储时,我注意到很多无法访问的java.lang.Object具有“Pending Finalization”注释。我不希望它们显示在堆转储中。

我的问题是,我应该在System.runFinalization()之前明确地调用diagnosticMBean.dumpHeap(fileName, true),还是完整的GC已经暗示了这一点?在后一种情况下,我如何知道所有无法到达的对象是否已经完成?睡10秒钟就够了吗?

谢谢!

0 个答案:

没有答案