【さんしょうカウント】
参照カウント とは?
💡 友達の数がゼロになったら退場する、厳格な人気投票システム
📌 このページのポイント
- オブジェクトごとに「何箇所から参照されているか」を数値で管理する
- 参照が増えるとカウントを+1、参照がなくなると-1する
- カウントがゼロになった瞬間にメモリを即座に解放できる
- 循環参照(AがBを、BがAを参照)があるとカウントがゼロにならず解放できない弱点がある
参照カウントって何?プログラムが使い終わったメモリって勝手に片付いてくれるの?
いい質問だね。参照カウントは「そのデータを誰が使っているか」を数で管理する方法だよ。たとえば図書館の本に「貸出中の人数」が書いてあるようなイメージで、誰も借りていなければ棚から撤去できるよね。
なるほど!じゃあ新しく誰かが使い始めると数が増えるんだね?
そうそう。変数Aがオブジェクトを参照すると+1、変数Bも参照すると+2。Aが別のものを参照し始めると-1で1に戻る。最終的にゼロになった瞬間にメモリを解放するんだよ。
ゼロになったらすぐ片付くって、すごく効率的じゃない?
そこが参照カウントの大きなメリットだよ。マーク&スイープみたいに「まとめてお掃除」する方式と違って、不要になった瞬間に解放できるからメモリの無駄が少ないんだ。
じゃあ完璧な仕組みなの?弱点はないの?
実は大きな弱点があるんだ。循環参照といって、AがBを参照してBもAを参照している場合、お互いのカウントが1のまま永遠にゼロにならない。これがメモリリークの原因になるよ。
それってどうやって解決するの?
カウントの+1や-1って処理が重くないの?
まとめ:ざっくりこれだけ覚えればOK!
「参照カウント」って出てきたら「参照の数を数えてゼロになったら解放するメモリ管理方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Reference Counting」 = 参照を数える
💬 「reference(参照)」を「counting(数える)」という、その名の通りのシンプルな仕組みだよ