Guava缓存是否考虑了驱逐选择中的重量?

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最近最少访问的顺序迭代.