Im folgenden Beispiel zerstört Garbage Collector ein nutzloses (referenzfreies) Objekt, wenn es als Schlüssel in weakHashMap verwendet wird, was in Ordnung ist. Aber wenn irgendein wertloses Objekt als Wert verwendet wird, dann, warum der Garbage Collector dieses Objekt nicht zerstört.Warum zerstört der Garbage Collector kein Objekt als Wert in WeakHashMap, der keinen Bezug hat?
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);
}
}
Temp-Klasse: -
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");
}
}
Ausgang
{hemant=temp, 6=bacon, 5=durga, temp=hemant}
finalize() mrthod is called
{hemant=temp, 6=bacon}
mir Acording ausgegeben werden soll: -
{hemant=temp, 6=bacon, 5=durga, temp=hemant}
finalize() mrthod is called
{hemant=null}