登录
首页 >  文章 >  java教程

Java 中的 WeakHashMap 是一个基于弱引用(WeakReference)实现的哈希表。它的特点是:当 Key 对象被垃圾回收器(GC)回收后,对应的 Entry 会自动从 WeakHashMap 中被清除,无需手动操作。实现原理WeakHashMap 的核心在于它使用了 弱引用 来包装 Key。具体来说:WeakHashMap 内部使用了一个 ReferenceQueue。每个 Ke

时间:2026-05-22 18:54:42 300浏览 收藏

WeakHashMap 是 Java 中一种基于弱引用的特殊哈希表,其核心价值在于让 Key 可被垃圾回收器自动清理,从而避免内存泄漏——当 Key 仅被 WeakHashMap 持有时,GC 一旦回收它,对应 Entry 就会变为失效状态(key == null),并在后续 get、put 等操作中被动触发清理;但需警惕:它并非实时清理、不保证线程安全、size() 不反映真实有效条目,且 Value 若反向持有 Key 会导致整个机制失效,因此不适合作为通用缓存,而更适合用于临时附着元数据(如 GUI 组件状态标记)等“不阻止对象回收”的轻量场景。

如何描述 Java 中的 WeakHashMap 它是如何实现在 Key 被 GC 回收后自动清理 Entry 的?

WeakHashMap 的 Key 为什么会被 GC 回收后自动失效?

因为 WeakHashMap 内部用的是 WeakReference 包装 Key,而不是强引用。只要这个 Key 对象没有其他强引用指向它,下一次 GC 就可能把它回收掉——而 WeakHashMap 本身不阻止这个过程。

注意:Value 仍然是强引用,如果 Value 又反过来持有 Key(比如 Value 是一个内部类实例、或显式保存了 Key 引用),那 Key 实际不会被回收,Entry 也就不会消失。