Guava CacheBuilder提前清除项目

时间:2016-12-19 15:59:53

标签: java guava google-guava-cache

我正在尝试创建一个简单的缓存,我可以在地图中存储一些数据元素。我需要将这些数据保存大约16个小时左右,之后我可以让旧项目过期。我正在实例化我的LoadingCache:

 cache = CacheBuilder.newBuilder()
                .concurrencyLevel(4)
                .weakKeys()
                .expireAfterWrite(16, TimeUnit.HOURS)
                .build(
                        new CacheLoader<K, V>() {
                            public V load(K key) throws Exception {
                                return getByKey(key);
                            }
                        });

有一个过程每分钟向列表中添加约16个项目。每隔12分钟左右,缓存就会完全消失。在expireAfterWrite()中设置的时间之前,我感到困惑的是导致缓存被清除的原因。

1 个答案:

答案 0 :(得分:3)

我猜是weakKeys()负责。如果缓存是唯一引用项目的缓存,则垃圾收集可能决定删除条目。来自Guava doc:

如果请求了weakKeys,weakValues或softValues,则垃圾收集器可以回收缓存中存在的键或值。