我试图使用Caffeine作为LRU缓存,这样先添加的条目将首先被淘汰。运行了这段代码:
final Cache<Object, Object> map = Caffeine.newBuilder()
.maximumSize(10)
.initialCapacity(10)
.build();
for (long i=0; i<20;i++) {
map.put(i, i);
}
map.cleanUp();
System.out.println(map.ge.getAllPresent(map.asMap().keySet()));
输出:
{0=0, 1=1, 2=2, 3=3, 4=4, 5=5, 6=6, 7=7, 8=8, 19=19}
但是我期望的是
{10=10, 11=11, 12=12, 13=13, 14=14, 15=15, 16=16, 17=17, 18=18, 19=19}
我做错了什么?
ConcurrentLinkedHashMap
的可选升序/降序迭代器。请注意,CLHM相对严格地遵循LRU,但由于并发可能会出现一些偏差。如果使用concurrencyLevel(1)
,Guava是严格的,但不公开驱逐顺序。 - Ben Manes