1

WeakHashMap.htmlのJavadocで、それは言った

「WeakHashMap の各キー オブジェクトは、弱参照の参照対象として間接的に格納されます。したがって、キーは、マップの内側と外側の両方で、キーへの弱参照がガベージ コレクターによってクリアされた後にのみ、自動的に削除されます。」

その後

値オブジェクトは、WeakHashMap 自体を介してそのキーを間接的に参照する場合があることに注意してください。つまり、値オブジェクトは、関連する値オブジェクトが最初の値オブジェクトのキーを強く参照する他のキーオブジェクトを強く参照する場合があります。

しかし、WeakHashMap では Key と Value の両方を弱参照にするべきではないでしょうか? つまり、メモリが不足している場合、GC は値オブジェクトによって保持されているメモリを解放します (ほとんどの場合、値オブジェクトはキー オブジェクトよりも多くのメモリを使用する可能性が高いため)。

また、GC が Value オブジェクトを解放すると、Key オブジェクトも解放されるのでしょうか?

基本的に、メモリが少ないときにメモリ使用量を削減する HashMap を探しています (GC は必要に応じて値とキー オブジェクトを収集します)。

Javaで可能ですか?

ありがとうございました。

4

2 に答える 2

1

弱参照はキャッシュには不適切です。NetBeans はそれを行いますが、ばかげている可能性があります。

SoftReferenceあなたが望むものです。それを正しく行うのは実際には非常に難しいので、他の人の解決策をコピーしてください。自分でキャッシュを明示的に管理することを勧める人もいます。

Reference単一の参照でのみ機能します。Java SE に「エフェメロン」を追加するという提案がありましたが、実装がうまくいくのを見たことがありません。

于 2010-03-18T21:22:27.810 に答える
1

アイデアは、この Map を「ルックアップ」データ構造として使用できるということです。これは、(キーを介して) 参照できるキーと値のペアのみを保持します。それでも、基本的な考え方は素晴らしいのですが、思ったほど役に立たなかったことを覚えています。

于 2010-03-18T21:23:11.237 に答える