相关性用例:

read input 

if (correlation-id is already generated for this input) 
{ 
   lookup the correlation-id from the cache; 
   return correlation-id; 
} 

else 
{ 
   generate the correlation-id; 
   cache it; 
   return correlation-id; 
} 

约束: - 输入记录的数量可以去,直到500K因此不希望使用 强引用。 - 不希望产生一个单向哈希截至目前(我知道,如果我们 使用单向散列那么就没有必要缓存)

有人能告诉我如何使用ComputingMap这一点。我问这个 因为存在这样说的Javadoc的说明“,它使用一个身份 对于弱/软键”平等。

有帮助吗?

解决方案

使用谷歌番石榴/集合类和软或弱键或值钥匙需要坚强的参考地图使用equals()方法,而不是==来查找缓存值。如果您有弱/软键,然后查找与身份这样做您总能获得高速缓存未命中。所以,如果你想在垃圾收集器从缓存中GC的项目,那么你就需要让值软或弱。

我明白谷歌将在未来增加一个等价功能,因此,如果你想的equals(你可以规定),或者==,而不必通过挑选强,弱或软引用为你做出了这个选择。

由于你的元组对象实现equals()和hashCode()方法,那么你只是做

new MapMaker()
    .softValues()
    .makeComputingMap(new Function<Tuple,String>() {
                                         public String apply(Tuple t) {
                                             // generate the correlation-id
                                         }
                                    });
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top