题
相关性用例:
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
}
});
不隶属于 StackOverflow