0

いくつかのデータ要素をマップに格納できる単純なキャッシュを作成しようとしています。このデータを約 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);
                            }
                        });

1 分ごとに最大 16 個のアイテムをリストに追加するプロセスがあります。約 12 分ごとに、キャッシュが完全に消去されます。expireAfterWrite() で設定された時間よりもかなり前に、キャッシュが一掃される原因に困惑しています。

4

1 に答える 1

3

私の推測では、それweakKeys()は責任があります。アイテムを参照しているのがキャッシュだけの場合、ガベージ コレクションによってエントリの削除が決定される場合があります。グアバのドキュメントから:

weakKeys、weakValues、または softValues が要求された場合、キャッシュに存在するキーまたは値がガベージ コレクターによって回収される可能性があります。

于 2016-12-19T16:07:01.643 に答える