WeakHashmap 的概念
关键点:-
- 地图的实施。
- 只存储对其键的弱引用。
弱引用 :仅由弱引用引用的对象是急切的垃圾收集; 在这种情况下,GC 不会等到它需要内存。
Hashmap 和 WeakHashMap 之间的差异: -
如果 Java 内存管理器不再具有对指定为键的对象的强引用,则将在 WeakHashMap 中删除映射中的条目。
示例: -
public class WeakHashMapTest {
public static void main(String[] args) {
Map hashMap= new HashMap();
Map weakHashMap = new WeakHashMap();
String keyHashMap = new String("keyHashMap");
String keyWeakHashMap = new String("keyWeakHashMap");
hashMap.put(keyHashMap, "Ankita");
weakHashMap.put(keyWeakHashMap, "Atul");
System.gc();
System.out.println("Before: hash map value:"+hashMap.get("keyHashMap")+" and weak hash map value:"+weakHashMap.get("keyWeakHashMap"));
keyHashMap = null;
keyWeakHashMap = null;
System.gc();
System.out.println("After: hash map value:"+hashMap.get("keyHashMap")+" and weak hash map value:"+weakHashMap.get("keyWeakHashMap"));
}
大小差异(HashMap 与 WeakHashMap):
在 HashMap 对象上调用 size()
方法将返回相同数量的键值对。只有在 HashMap 对象上显式调用 remove()
方法时,size 才会减小。
由于垃圾收集器可能随时丢弃密钥,因此 WeakHashMap 的行为可能就像未知线程正在静默删除条目一样。因此,size 方法可以随时间返回较小的值。因此,在 WeakHashMap 中,大小减小会自动发生。