集合系列 Map(十四):WeakedHashMap

WeakedHashMap 也是 Map 集合的哈希实现,但其余 HashMap 的不同之处在于。其每个节点的 value 引用是弱引用,可以方便 GC 回收。

public class WeakHashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V> 

从 WeakHashMap 的定义来看,WeakHashMap 并没有继承 HashMap,这就意味着 WeakHashMap 必须自己重新实现一遍 HashMap 实现过的逻辑。这是因为 WeakedHashMap 中的引用是弱引用,所以有许多与 HasMap 不同的逻辑,所以需要自己写一遍实现。

要明白 WeekHashMap 的工作原理,还需要引入一个概念:弱引用(WeakReference)。我们都知道Java中内存是通过GC自动管理的,GC会在程序运行过程中自动判断哪些对象是可以被回收的,并在合适的时机进行内存释放。GC判断某个对象是否可被回收的依据是,是否有有效的引用指向该对象。如果没有有效引用指向该对象(基本意味着不存在访问该对象的方式),那么该对象就是可回收的。这里的“有效引用”并不包括弱引用。也就是说,虽然弱引用可以用来访问对象,但进行垃圾回收时弱引用并不会被考虑在内,仅有弱引用指向的对象仍然会被GC回收。

WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢?将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用。

原理

博主偷懒了呢。

posted @ 2019-08-28 21:14  陈树义  阅读(...)  评论(... 编辑 收藏