В приведенном ниже примере сборщик мусора уничтожает бесполезный (без ссылок) объект, если он используется в качестве ключа в weakHashMap, что нормально... но если какой-либо бесполезный объект является значением, то почему сборщик мусора не уничтожает этот объект...
public class WeakHashMapDemo {
public static void main(String[] args) throws InterruptedException{
WeakHashMap whs=new WeakHashMap();
Temp t=new Temp();
Temp t1=new Temp();
Integer x=new Integer(5);
Integer y=6;
whs.put(t,"hemant");
whs.put("hemant", t1);
whs.put(x,"durga");
whs.put(y,"bacon");
System.out.println(whs);
t=null;
t1=null;
x=null;
y=null;
System.gc();
Thread.sleep(2000);
System.out.println(whs);
}
}
Временный класс:-
class Temp{
@Override
public String toString() {
return "temp"; //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void finalize() throws Throwable {
System.out.println("finalize() mrthod is called");
}
}
вывод
{hemant=temp, 6=bacon, 5=durga, temp=hemant}
finalize() mrthod is called
{hemant=temp, 6=bacon}
по моему мнению, вывод должен быть:-
{hemant=temp, 6=bacon, 5=durga, temp=hemant}
finalize() mrthod is called
{hemant=null}