未指定maxSize时,Google Guava Cache会清除SIZE的条目

noa*_*hlz 4 java guava

我正在使用Google Guava CacheBuilder创建一个Cache实例.我的代码如下所示:

return CacheBuilder.newBuilder()
            .initialCapacity(initialCapacity)
            .expireAfterAccess(expirationInterval, TimeUnit.SECONDS)
            .removalListener(LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER)
            .build();
Run Code Online (Sandbox Code Playgroud)

我的删除监听器,顾名思义:

private static final RemovalListener<MyKey, MyRecord>  LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER
        = new RemovalListener<MyKey, MyRecord>() {
            @Override
            public void onRemoval(RemovalNotification<MyKey, MyRecord objectObjectRemovalNotification) {
                if (objectObjectRemovalNotification.wasEvicted()) {
                    log.debug("Entry evicted from cache: {} - Reason: {}", objectObjectRemovalNotification, objectObjectRemovalNotification.getCause());
                }
            }
        };
Run Code Online (Sandbox Code Playgroud)

最后,我只get使用了我的缓存条目get(K key, Callable<? extends V> valueLoader)

这是问题:使用上面的代码,我看到以下日志输出:

19:08:03.287 DEBUG [MyCache] - Entry evicted from cache: MyKey[123]=MyRecord@43ee148b - Reason: SIZE

当我没有maximumSize()在CacheBuilder调用中使用时,为什么记录会从我的缓存中逐出?我怀疑它与"体重"有关.如果是这样,我需要知道maxWeight()在到期时间之前没有被删除的缓存条目?

注意我知道Google Guava网站上的Caches解释.

Kev*_*ion 7

expirationInterval的意外可能等于零吗?作为expireAfterAccess文件,"什么时候duration为零,这个方法交给了maximumSize(0)."