请解释 Java 中 WeakHashMap 的概念、工作机制以及典型应用场景。
考察说明
考查对 WeakHashMap 底层实现及其弱引用语义的理解。
回答思路
- 【回答框架 1】WeakHashMap 是 Java 集合框架中基于哈希表的 Map 实现,其键使用 WeakReference 包装,当键对象不再被外部强引用时,该键值对会在下次 GC 时被自动清除。
- 【回答框架 2】底层结构类似 HashMap,但 Entry 继承 WeakReference 并持有 value 引用,通过 ReferenceQueue 在键被回收后清理过期 Entry。
- 【回答框架 3】典型应用包括缓存场景(如 Tomcat 的缓存)或需要避免内存泄漏的映射,但注意值可能被强引用导致无法回收。
- 【回答框架 4】与 HashMap 的区别在于键的回收行为,与 IdentityHashMap 的区别在于使用 equals 比较键。
- 【回答框架 5】线程不安全,需要外部同步;且清除操作依赖 GC,键值对可能在任何时刻消失,不适合需要确定性的场景。
- 【关键点 1】WeakHashMap 键使用弱引用,键无强引用时条目会被 GC 自动移除。
- 【关键点 2】借助 ReferenceQueue 在键被回收后清理对应 Entry。
- 【关键点 3】常用作缓存或辅助数据结构,但值可能意外阻止回收。
- 【易错点 1】误以为 WeakHashMap 保证幂等或持久性。
- 【易错点 2】忽略值持有键的强引用导致回收失效。
- 【易错点 3】在多线程环境下未同步使用。