弱い参照
ガベージコレクタ (GC) はメモリオブジェクトのライフサイクル管理を自動化し、メモリリークを防ぐために用いられる。GCの方式のひとつとして参照カウント方式があり、これはオブジェクトごとに参照の数を記録する領域(参照カウンタ)を用意し、その数が0になった時点でオブジェクトを解放するというものである。この方式のGCは、あるオブジェクト間で参照が循環した場合にそれらを解放することができない(循環参照)。そのため、相互に参照しあったオブジェクト群はメモリリークの原因となる。この問題は、強い参照を弱い参照で置き換えることで解決することが可能な場合がある。一方、マーク・アンド・スイープ方式やコピーGC方式では循環参照によるメモリリークは発生しないが、非意図的オブジェクト保持(unintentional object retention)が引き起こすメモリリークを強参照のみによる実装で解消することは難しく煩雑であり、実装を簡略化するために弱参照が用いられることがある。
弱参照で参照されているオブジェクトは、アプリケーションコード側ではいつガベージコレクションされるか分からず、弱参照経由では直接オブジェクト参照として扱うことはできない。オブジェクト参照として利用するためには、弱参照から一時的な強参照にいったん変換し、GCから保護する必要がある。一時的な強参照の格納先には通例ライフサイクルが短くスコープの狭いローカル変数を利用し、オブジェクト参照が不要になった時点ですみやかに解放する。
弱い参照が便利なひとつの例として、アプリケーション内で参照されている変数を追跡するケースがある。この追跡リストは、対象オブジェクトに対して弱い参照で参照しなければならない(弱いコレクション)。そうしなければ、一度リストに加えられたオブジェクトはリストによって参照されるため、プログラムが停止するまで半永久的に解放されることはない。