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
1
A
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()
}
}
}
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. –
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:/ –
Est-il possible de ne pas obtenir la notification GC avec ce code? Dans mon cas, handleNotification n'est pas appelé. – AKS