2

以下のようなweakValuesに基づいて、アプリケーションでgoogle guavaを使用しました。

CacheBuilder
            .newBuilder()
            .weakValues()
            .concurrencyLevel(Runtime.getRuntime().availableProcessors())
            .removalListener(removalListener)
            .build(cacheLoader);

キャッシュの弱い値が削除された直後には、削除リスナーは呼び出されません。これに基づいてネイティブ リソースをクリアする必要があるため、プログラムはネイティブ エンドでメモリを解放せずに終了します。それは既知の問題ですか?

4

2 に答える 2

2

Google Guava docsでは、次のように述べています。

CacheBuilder で構築されたキャッシュは、クリーンアップを実行せず、値を「自動的に」または値の有効期限が切れた直後に削除したり、そのようなものを削除したりしません。代わりに、書き込み操作中、または書き込みがまれな場合は不定期の読み取り操作中に、少量のメンテナンスを実行します。

また、彼らがこの決定を下した理由と利用可能な代替案についても説明されています。

于 2015-09-18T21:20:40.997 に答える
0

JVM GCがweakRefを要求した場合、リスナーが呼び出されるとは思いません。そのリスナーは、エビクション ポリシーがエビクションをトリガーする場合にのみ機能する必要があります。例: expireAfterWriter() または expireAfterAccess()

于 2017-12-12T20:33:44.667 に答える