1、java -version:
java 1.6
2、example: 如下面代码
WeakHashMap<String, String> map = new WeakHashMap<String, String>();
map.put(new String("1"), "1");
map.put("2", "2");
String s = new String("3");
map.put(s, "3");
while(map.size() > 0)
{
try
{
Thread.sleep(500);
}
catch(InterruptedException ignored)
{
}
System.out.println("Map Size:" + map);
System.gc();
}
}
其中1会回收,2由于String的特殊性不会回收,3因为有强引用存在所以也不会回收。
对weakrefrence的作用理解是:对象不能存在强引用,否gc会把对象当成强引用处理。
对weakhashmap的理解是:大神说可以用来消除过期对象的,肯定是有道理的,只是个人还没理解透彻用在何种场合。如果对象在刚放进weakhashmapde的时候就发生了GC岂不是,这个值就丢了?如果单从上面的例子来看确实是这样的,那岂不是写出的程序很不稳定,其实用weakhashmap的时候是作为强引用hashmap的补充,当强引用范围外,还是想用该对象但是又不想干扰强引用对象的生命周期,就可以用弱引用(weakhashmap)来管理缓存。当强引用回收时,弱引用可以随时被回收!