【发布时间】:2020-05-12 05:05:09
【问题描述】:
WeakCache 在 Java 中有哪些用例?
【问题讨论】:
标签: java caching concurrenthashmap
WeakCache 在 Java 中有哪些用例?
【问题讨论】:
标签: java caching concurrenthashmap
默认情况下,在 Hashmap 中,当发现对某个值的引用已被清除时,会移除相应的键。此类本质上提供了一个具有强引用键和弱引用值的映射。获取引用已被清除的值会为 null。
假设我们要构建一个缓存,将大图像对象作为值,将图像名称作为键。我们想选择一个合适的地图实现来解决这个问题。
使用简单的 HashMap 将不是一个好的选择,因为值对象可能会占用大量内存。更重要的是,它们永远不会被 GC 进程从缓存中回收,即使它们不再在我们的应用程序中使用。
理想情况下,我们需要一个允许垃圾收集器自动删除未使用对象的 Map 实现。当一个大图像对象的键在任何地方都没有在我们的应用程序中使用时,该条目将从内存中删除。
另一种方式(弱引用键和强引用值)是 WeakHashMap。当垃圾回收 (GC) 进程丢弃一个键时,它的条目实际上会从映射中移除,因此此类的行为与其他 Map 实现有所不同。
另外一点,在我看来,创建自己的缓存实现几乎总是一个坏主意。利用像谷歌缓存这样的库。 https://www.tutorialspoint.com/guava/guava_caching_utilities.htm
【讨论】: