WeakReference, SoftReferenceについて


JavaのWeakReferenceとSoftReferenceはどのような違いがあるのですか？またどのような用途で使い分けると良いのですか？  
ドキュメントを読んでみた感じでは、WeakReferenceはガーベッジコレクタが動いた時に必ずクリアされる、SoftReferenceはメモリの状況によってはクリアされることもある(いずれも直接参照している箇所がない場合)ということなのかなと思ったのですが、この認識で正しいのでしょうか？




>
> ドキュメントを読んでみた感じでは、WeakReferenceはガーベッジコレクタが動いた時に必ずクリアされる、SoftReferenceはメモリの状況によってはクリアされることもある(いずれも直接参照している箇所がない場合)ということなのかなと思ったのですが、この認識で正しいのでしょうか？

その認識でOKです。

使い分けとしては、参照先のオブジェクトが不要になった後に再利用される可能性があるなら`SoftReference`、そうでないなら`WeakReference`を使用することになります。

`SoftReference`は、「今は必要ないが、後でまた使うかもしれないからメモリに余裕があるなら取っておいてほしい」というオブジェクトを保持するのに便利です。キャッシュなどに使われる場面が多いと思います。




>
> ドキュメントを読んでみた感じでは、WeakReferenceはガーベッジコレクタが動いた時に必ずクリアされる、SoftReferenceはメモリの状況によってはクリアされることもある(いずれも直接参照している箇所がない場合)ということなのかなと思ったのですが、この認識で正しいのでしょうか？

その認識でOKです。

使い分けとしては、参照先のオブジェクトが不要になった後に再利用される可能性があるなら`SoftReference`、そうでないなら`WeakReference`を使用することになります。

`SoftReference`は、「今は必要ないが、後でまた使うかもしれないからメモリに余裕があるなら取っておいてほしい」というオブジェクトを保持するのに便利です。キャッシュなどに使われる場面が多いと思います。

