Bonjour à tous,
Dans une aplpication, je tente de récupérer le cpuUsage de chaque
threads. J'ai écris une routine pour cela, et depuis j'ais une Enorme
fuite mémore. J'isole la méthode pour test, et je m'aperçois qu'il
sagis d'une fuite dans la mémore native (la mémoire de la JVM est
stable).
Pouriez-vous me m'expliquer pourquoi.
Voici le code d'exemple
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.text.DateFormat;
import java.text.Format;
import java.text.NumberFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.apache.log4j.Logger;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import com.bodet.open.utils.ThreadTimes;
/*
* (c) Copyright 2004 BODET S.A.
* All Rights Reserved.
*
* $Log: $
*/
public class Main3 extends Thread
{
private static ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
/**
* TODO Ajouter le commentaire de la méthode
*
* @param args
*/
public static void main(String[] args)
{
new Main3().start();
}
public Main3()
{
super();
}
@Override
public void run()
{
while (true)
{
long tmpThreadTime = 0;
for
(ThreadInfo threadInfo : threadMXBean.dumpAllThreads(false, false))
{
long tmp = threadMXBean.getThreadCpuTime(threadInfo.getThreadId());
if (tmp != -1)
{
tmpThreadTime += tmp;
}
}
System.out.println(tmpThreadTime);
}
}
}
A+