永続的に保存されているオブジェクトのキャッシュを実装しています。アイデアは次のとおりです。
- 方法
getObjectFromPersistence(long id); ///Takes about 3 seconds
- 方法
getObjectFromCache(long id) //Instantly
そしてgetObject(long id)
、次の擬似コードを使用したメソッドがあります。
synchronized(this){
CustomObject result= getObjectFromCache(id)
if (result==null){
result=getObjectFromPersistence(id);
addToCache(result);
}
return result;
}
ただし、ガベージコレクターがCustomObjectを収集できるようにする必要があります。今まで私はHashMap<Long,WeakReference<CustomObject>
実装にを使用していました。問題は、時間の経過とともにHashMapが空でいっぱいになることWeakReferences
です。
WeakHashMapを確認しましたが、キーが弱い(そして値は依然として強い参照である)ため、WeakReferencesでlongを使用しても意味がありません。
この問題を解決するための最良の解決策は何ですか?「逆WeakHashMap」などはありますか?
ありがとう