我有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。

09-10 07:49