WeakHashMap 是一种特别的 Map 实现,它的所有键都存储在 WeakReference 中。相较于 HashMapWeakHashMap 与其功能基本完全一致,除了唯一一个显著的差别:如果 Java 的内存管理器不再有某个键对象的强引用,那么这个条目就会被从该 Map 中移除。

我们这样来创建一个 WeakHashMap

1
HashMap map = new WeakHashMap();

我们可以通过引用某些对象的方式使用 WeakHashMap 来保存资源,但是同时允许这个资源在没有引用的时候被 Java 的垃圾回收器回收:

1
System.gc();

所以大家普遍认为,可以通过 WeakHashMap 来解决缓存问题,因为当引用过期之后就会被丢弃。

这个类的另一种用法是创建 canonical map,你可以存储额外的属性在某个对象里面,因为当它们过期之后,WeakHashMap 的相应条目就会立马被丢弃。

关于 WeakHashMap 的使用例子,请阅读参考资料