如果 Hashmap 条目对象(条目对象存储键值对)不符合垃圾回收条件。换句话说,即使与键值对关联的键对象为空,条目对象仍将保留在内存中。
而在weakhashmap的情况下,WeakHashMap中的An条目将在其键不再正常使用时自动被删除(即使对给定键进行映射也不会阻止该键被垃圾收集器丢弃然后回收)。当一个键被丢弃时,它的条目会自动从映射中删除,换句话说,就是垃圾回收。
WeakHashMap 中的每个键对象都间接存储为弱引用(也称为硬引用)的引用。因此,只有在映射内部和外部的弱引用被清除后,键才会自动删除由垃圾收集器。示例: public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
Map<String, String> map2 = new WeakHashMap<String, String>();
String hashmapKey = new String("hashmapkey");
String weakhashmapKey = new String("weakhashmapkey");
map.put(hashmapKey, "value");
map2.put(weakhashmapKey, "value");
System.out.println("Before garbage call");
System.out.println(map);
System.out.println(map2);
hashmapKey = null;
weakhashmapKey = null;
System.out.println("After garbage call");
System.gc();
System.out.println(map);
System.out.println(map2);
}
输出:
垃圾调用前 {hashmapkey=value} {weakhashmapkey=value} 垃圾调用后 {hashmapkey=value} {}