Dav*_* L. 7 java caching guava
优秀的Guava库的最新版本更新了缓存apis.CacheBuilder现在有一个maxmimumWeight()方法来强制缓存的最大权重.javadoc说:
指定缓存可能包含的条目的最大权重.使用Weigher指定的Weigher确定权重,并且在调用build(com.google.common.cache.CacheLoader)之前,使用此方法需要对称重者进行相应的调用.
请注意,缓存可能会在超出此限制之前逐出条目.随着缓存大小接近最大值,缓存逐出不太可能再次使用的条目.例如,高速缓存可以驱逐一个条目,因为它最近或者经常没有使用过.
当Cache需要逐出一个条目时,它会考虑权重吗?例如,如果较大的重量条目比任何小的项目更频繁地使用,但是比所有小的项目一起使用更少,则保持几个小重量的条目可能比一个大重量的条目更好.
Lou*_*man 13
番石榴团队成员在这里.
随着缓存大小接近最大值,缓存逐出不太可能再次使用的条目.例如,高速缓存可以驱逐一个条目,因为它最近或者经常没有使用过.
如果缓存有任何其他行为,则不会记录(并且不应该依赖).也就是说,如果查看源代码,当前实现只关心最近访问过的内容:
while (totalWeight > maxSegmentWeight) {
ReferenceEntry<K, V> e = getNextEvictable();
if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
并按getNextEvictable最近最少访问的顺序迭代.