【さんしょうカウント】
参照カウント とは?
最終更新:
💡 保持する参照の数を見て、片付ける
オブジェクトを保持する参照を数え、不要になったオブジェクトを解放するメモリ管理の方式。増減の例、循環参照、CPythonの補助GCとSwiftの弱参照を説明します。
📌 このページのポイント
- オブジェクトを保持する強い参照の数を管理する
- 新たな強い参照で1増え、その参照を手放すと1減る
- 単純な参照カウントだけでは、循環する強い参照を回収できない
- 実装によって、補助のGCや弱参照などと組み合わせる
参照カウントは、何を数えるの?
AとBが同じものを使うと、いくつ?
他に強い参照がない単純な例なら、Aだけで1、Bも参照するとさらに1増えて合計2だよ。Aが手放すと1、Bも手放すと0になる。単純な方式では、最後の強い参照がなくなったオブジェクトを解放するんだ。
AとBがお互いを参照したら?
外から使う参照がなくなっても、互いを保持する強い参照が残ると数が0にならないよ。これが循環参照。単純な参照カウントだけでは回収できないので、仕組みや参照の持ち方を工夫する必要があるんだ。
CPythonは参照カウントを、循環参照を扱うGCで補うよ。SwiftのARCでは、必要な関係にweakなどを使って強い参照の循環を避ける。解放のタイミングや最適化は実装で違うので、全言語で同じ動作と考えないようにしよう。
まとめ:ざっくりこれだけ覚えればOK!
「参照カウント」って出てきたら「保持する参照の数を数えて、不要なオブジェクトを片付ける方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Reference Counting」 = 参照を数える
💬 「reference(参照)」を「counting(数える)」という、その名の通りのシンプルな仕組みだよ