WeakHashMapでメモリ使用量を削減
-
20-09-2019 - |
質問
WeakHashMap.html のJavadocのA>は、
言いました」のWeakHashMap内の各キーオブジェクトは、 の参照先として間接的に記憶されています 弱い参照。したがって、キーが 自動的後にのみ削除されます それへの弱参照、両方の内側 そしてマップの外に、となっています ガベージコレクタによってクリアされます。 "
そして
値オブジェクトが参照することができることに注意してください 介して間接的にそのキーへ 自分自身をのWeakHashMap。それは、値であり、 オブジェクトが強く、いくつかを参照してもよいです その関連する他のキーオブジェクト 値オブジェクトは、順番に、強く指し、 第1の値オブジェクトのキーに
しかし、キーと値の両方がのWeakHashMapで弱い参照を使用する必要があるべきではないのですか? メモリが不足している場合(値オブジェクトが最も可能性が高いほとんどの場合、キーオブジェクトより多くのメモリを取るため)、すなわち、GCが値オブジェクトが保持しているメモリを解放する?
GCは、Valueオブジェクトを解放する場合は、そして、キーオブジェクトも同様に自由にすることができますか?
基本的に、私はメモリ不足が(必要に応じて、GCが値とキーのオブジェクトを収集)がある場合、メモリ使用量を削減するのHashMapを探しています。
これは、Javaで可能ですか?
ありがとうございます。
解決
弱参照はキャッシュには不適切です。
SoftReference
は、あなたが望むものです。そう他人のソリューションをコピーする - それが権利を取得するために、実際には非常に困難です。一部の人々は、明示的に管理するには、自分自身をキャッシュ助言ます。
Reference
sは、単一参照して動作します。そこのJava SEに「ephemerons」を追加するための案だったが、私は実装がそれをどこにも行か見たことがありません。
他のヒント
アイデアは、あなたはまだ(キー経由)に参照することができる唯一の生きているキーと値のペアを保持して「検索」のデータ構造として、この地図を使用することができるということです。基本的な考え方はいいですしながら、それでも、私は私はそれが望んだとしてとして有用ではなかったことを覚えています。