番石榴缓存 - 通过身份比较值的含义是什么

时间:2014-01-07 14:16:19

标签: java guava

CacheBuilder方法weakValues()softValues()都在其javadoc中包含此行:

  

注意:使用此方法时,生成的缓存将使用identity(==)比较来确定值的相等性。

这究竟是如何影响行为的?据我所知,CacheLoadingCache接口上没有需要测试值相等的公共方法。它会影响asMap()视图吗?

2 个答案:

答案 0 :(得分:0)

我猜它在内部使用Google的ConcurrentMap并使用removereplace的值比较。

答案 1 :(得分:0)

Guava 在内部缓存 soft / weak 值。如果2个弱/软值的引用相等,那么内容也必须相等。

Guava 仅比较包含(...)删除(...)替换等方法中的值(...)并用于查找特定条目并检查它是否真的存在或删除密钥。因此,番石榴首先寻找特定的条目。如果找到则删除该条目。

我认为主要目的是检测一个条目的重复删除,因为如果引用指向的值已经 null ,那么它不是显式删除,但内部已由番石榴删除(计算)。

没什么值得担心的。这就是番石榴处理旧条目删除的方式。

没有办法改变这个,你真的不必关心这个,番石榴会处理这个:D