【问题标题】:Guava CacheBuilder evicts items ahead of scheduleGuava CacheBuilder 提前驱逐项目
【发布时间】:2017-05-04 17:42:01
【问题描述】:

我正在尝试创建一个简单的缓存,我可以在其中将一些数据元素存储在地图中。我需要将这些数据保留大约 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() 中设置的时间。

【问题讨论】:

  • 是的,这绝对是weakKeys()。你在使用它时有什么想法?

标签: java guava google-guava-cache


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多