【发布时间】:2015-01-06 01:31:46
【问题描述】:
我想测试 Java WeakHashMap 类的功能,为此我编写了以下测试:
public class WeakHashMapTest {
public static void main(String args[]) {
Map<String, Object> weakMap = new WeakHashMap<>();
String x = new String("x");
String x1 = new String("x1");
String x2 = new String("x2");
weakMap.put(x, x);
weakMap.put(x1, x1);
weakMap.put(x2, x2);
System.out.println("Map size :" + weakMap.size());
// force all keys be eligible
x=x1=x2=null;
// call garbage collector
System.gc();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Map size :" + weakMap.size());
System.out.println("Map :" + weakMap);
}
}
运行 WeakMapTest 类后,我非常惊讶地得到以下输出:
gc 之前的映射:{x=x, x1=x1, x2=x2} gc 后的映射:{x=x, x1=x1, x2=x2}
当我预计地图将为空时。
也就是说,垃圾收集器没有完成它的工作。但为什么?
【问题讨论】:
标签: java garbage-collection weak-references weakhashmap