У меня есть 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 будет работать в течение всего времени жизни приложения, в то время как экземпляры класса B, на которые ссылается хэш-карта (isc), находится в классе A.
Проблема в том, что после того, как я запустил метод UserDisconnected () в классе A, я вижу, что размер isc равен 0, но использование памяти, как показано в диспетчере задач Windows Server 2008, возвращается вниз, не видит памяти быть освобожденным.
Интересно, были ли собраны экземпляры класса B в хэш-карте? или они потерялись где-то там, где сборщик мусора даже не смог его собрать.
Спасибо.