2015-03-18 86 views
1

我使用GarbageCollectionNotificationInfo通知来跟踪GC事件。这很好,但看起来输出是无效的。我预计getGcInfo().getMemoryUsageBeforeGc() -> MemoryUsage.getUsed()将在运行当前的GC之前报告特定的段使用情况。 但它始终等于之前通知中的getGcInfo().getMemoryUsageAfterGc()。这里有什么问题?GarbageCollectionNotificationInfo值看起来无效

回答

1

这里是我使用和它工作:)我的意思是我得到正确的数字之前和之后GC。

public synchronized void handleNotification(Notification notification, Object handback) { 
    if (GARBAGE_COLLECTION_NOTIFICATION.equals(notification.getType())) { 
     GarbageCollectionNotificationInfo info = from((CompositeData) notification.getUserData()); 

     com.sun.management.GarbageCollectorMXBean mxBean = (com.sun.management.GarbageCollectorMXBean) handback; 
     GcInfo gcInfo = mxBean.getLastGcInfo(); 

     if (gcInfo != null) { 
//use gcInfo.getMemoryUsageBeforeGc() and gcInfo.getMemoryUsageAfterGc() 
     } 
    } 
    } 
+0

Thanks @Nikem!我使用远程JMX,并且句柄始终为空,所以我使用从GCNI信息对象检索到的GcInfo。例如,之后的幸存者空间总是与之前的下一个通知相同。 – 2015-03-19 10:13:32

+1

只注意到有问题的值仅适用于有意义的幸存者空间,因为对象仅在GC期间移至此处:/ – 2015-03-19 11:23:27

+0

可能无法通过此代码获取GC通知?在我的情况下handleNotification没有被调用。 – AKS 2017-11-07 13:57:30