WeekReferenceとSoftReference

チョット前に、近くでjava.refパッケージに関するトラブルがありました。
WeekReferenceとSoftReferenceは違いがよく分からなくて選択に困るんですよね。
例えるなら、こんな感じでしょーか。


●強参照(通常のオブジェクト)
いらなくなったらゴミ箱に棄てる(リンクが切れる)。
ゴミ箱に棄てるとオブジェクトは使えない。
回収業者(GC)がくると回収される。


●弱参照(WeekReference)
ゴミ箱の横に置く。棄てたわけではない。
使うことがあるかもしれないが、なくなっても構わない。
回収業者(GC)はゴミと一緒に回収する。
ゴミが回収されるまで使うことができる。


●ソフト参照(SoftReference)
ゴミ箱の横に置く。棄てたわけではない。
使うことがあるかもしれないが、なくなっても構わない。
ゴミが回収されるまで使うことができる。
ゴミを回収するかどうかは回収業者(GC)が決める。
SunのJVMでは新しいゴミは回収せず、時間が経った古いゴミを回収する。


ソフト参照が想定外の動きで多発すると、GCが発生してもなかなか回収されず、
メモリがソフト参照オブジェクトだらけになって、メモリを圧迫することがあります。