2015-03-18 2 views
1

J'utilise les notifications GarbageCollectionNotificationInfo pour suivre les événements GC. C'est sympa, mais on dirait que la sortie n'est pas valide. Je m'attends à ce que getGcInfo().getMemoryUsageBeforeGc() -> MemoryUsage.getUsed() signale l'utilisation particulière du segment avant d'exécuter le GC actuel. Mais il est toujours égal à getGcInfo().getMemoryUsageAfterGc() à partir de la notification précédente. Quel est le problème ici?Les valeurs de GarbageCollectionNotificationInfo ne semblent pas valides

Répondre

1

Voici le J'utilise et ça marche :) Je veux dire que j'obtiens des nombres corrects avant et après le 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

Merci @Nikem! J'utilise JMX à distance et handle est toujours null, donc j'utilise GcInfo récupéré à partir de l'objet info GCNI. Et par exemple pour l'espace Survivant après est toujours le même que la notification suivante avant. –

+1

Juste remarqué que les valeurs problématiques sont seulement pour les espaces survivant qui a du sens, comme les objets sont déplacés ici seulement pendant GC:/ –

+0

Est-il possible de ne pas obtenir la notification GC avec ce code? Dans mon cas, handleNotification n'est pas appelé. – AKS