首页 > 解决方案 > Java中WeakCache的用例是什么?

问题描述

Java中WeakCache的用例有哪些?

标签: javacachingconcurrenthashmap

解决方案


默认情况下,在 Hashmap 中,当发现对某个值的引用已被清除时,会移除相应的键。此类本质上提供了一个具有强引用键和弱引用值的映射。获取其引用已被清除的值将变为 null。

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

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

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

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

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


推荐阅读