我有2个班级,我们称A类和B类。
public class A{
private static HashMap<String,B> isc= new HashMap<String,B>();
public static void UserDisconnected(String key){
if(isc.containsKey(key)){
if(isc.get(publicSID).timer != null){
isc.get(key).timer.cancel();
isc.get(key).timer=null;
}
isc.remove(key);
}
log.debug("isc size:" + isc.size());
}
//and other non-static variables and methods
}
public class B{
//contain no static variables and methods
public void startStream(){
timer = new Timer();
timer.schedule(new timedTask(), 0, interval);
}
public class timedTask extends TimerTask{
public void run(){
//do something
}
}
类A将贯穿应用程序的整个生命周期,而在类A的hashmap(isc)中引用的类B的实例。
问题是,在类A中运行UserDisconnected()方法后,我看到isc的大小为0,但是Windows Server 2008任务管理器中显示的内存使用率下降,看不到任何内存被释放。
所以,我想知道,是否在哈希映射垃圾中收集了B类的实例?还是他们迷失在垃圾收集器无法收集的地方。
谢谢。
最佳答案
我认为您不希望看到任务管理器中的内存使用下降。所使用的内存将返回给Java以供将来使用,而不是返回给其他应用程序的OS。