Java 中 WeakCache 的用例是什么?

What is the use case of WeakCache in Java?

WeakCache 在 Java 中有哪些用例?

默认情况下,在一个Hashmap中,当发现对某个值的引用被清除时,对应的key就会被移除。这个 class 本质上提供了一个具有强引用键和弱引用值的映射。获取引用已被清除的值将返回 null。

假设我们要构建一个缓存,将大图像对象保存为值,将图像名称保存为键。我们想选择一个合适的地图实现来解决这个问题。

使用简单的HashMap 不是一个好的选择,因为值对象可能会占用大量内存。更重要的是,它们永远不会被 GC 进程从缓存中回收,即使它们不再在我们的应用程序中使用。

理想情况下,我们需要一个允许垃圾收集器自动删除未使用对象的 Map 实现。当我们的应用程序在任何地方都没有使用大图像对象的键时,该条目将从内存中删除。

另一种方式(弱引用键和强引用值)是 WeakHashMap。当垃圾回收 (GC) 进程丢弃一个键时,它的条目实际上从映射中删除,因此此 class 的行为与其他映射实现有些不同。

补充一点,在我看来,创建自己的缓存实现几乎总是一个坏主意。使用像 google 缓存这样的库。 https://www.tutorialspoint.com/guava/guava_caching_utilities.htm