商城首页欢迎来到中国正版软件门户

您的位置:首页 >如何描述 Java 中的 WeakHashMap 它是如何实现在 Key 被 GC 回收后自动清理 Entry 的?

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

  发布于2026-04-30 阅读(0)

扫一扫,手机访问

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

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

先看一个核心机制:WeakHashMap 的 Key 被 GC 回收后,其对应的 Entry 会自动失效。这背后的原理是,它的 Key 被 WeakReference 包装,当没有任何强引用指向这个 Key 时,GC 就可以将其回收。此时,Entry 会进入一种 Key 为 null 的失效状态。后续的 getput 等操作会触发内部的 expungeStaleEntries() 方法,扫描并移除这些失效的 Entry。

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

关键在于,WeakHashMap 内部使用的是 WeakReference 来包装 Key,而非强引用。这意味着,只要这个 Key 对象在程序的其他地方没有被强引用“拴住”,下一次垃圾回收就可能把它带走——而 WeakHashMap 本身并不会阻止这个过程。

这里有个重要的细节:Value 仍然是强引用。如果 Value 反过来又持有了对 Key 的引用(例如,Value 是一个内部类实例,或者显式保存了 Key),那么 Key 实际上就不会被回收,对应的 Entry 自然也就不会消失。