WeakReference
(Android) ビットマップ キャッシュの一部として s を使用して、ビットマップが使用されなくなったことを確認できるようにしたいと考えています。
キャッシュの最大サイズが Java ヒープ領域より小さいです。新しいビットマップがキャッシュをオーバーフローする場合、不要になったビットマップを解放する必要があります。
私の質問: get() メソッドがWeakReference
null を返すのはいつですか?
- オブジェクトへの強い参照がなくなるとすぐに? (そしてGCはまだ発生していません)
- または、GC が実行され、オブジェクトへの強い参照がなくなったと判断されたときは?
2. が true の場合、キャッシュがいっぱいになる可能性があり、何らかの理由で GC が最近実行されていないという状況に遭遇する可能性があります。
次に、最後の GC 実行後に参照を既に手放していたとしてもWeakReference#get()
、オブジェクトを返し、キャッシュはそれをクリアしません。