メインコンテンツへ
アルゴリズムとプログラミングガベージコレクション

参照カウント法によるガベージコレクションの説明として正しいものはどれか。

ア.オブジェクトへの参照数が0になった時点でそのオブジェクトをメモリから解放する正解
イ.プログラム実行を一時停止し、ルートから到達できないオブジェクトをまとめて解放する
ウ.使用中のオブジェクトをメモリの片側に移動させ、もう一方の領域を一括解放する
エ.一定時間ごとにメモリをスキャンし、最長未使用のオブジェクトを解放する

解説

参照カウント法は「図書館の貸出台帳」方式。本(オブジェクト)を借りている人(参照)の数を常にカウントしておき、借りている人がゼロになった瞬間、本を棚(メモリ)から下ろす(解放する)仕組み。

なぜ ア が正解か

参照カウント法では、各オブジェクトに「自分を指している参照の数」を記録するカウンタを持たせる。参照が増えるとカウンタをインクリメント、参照がなくなるとデクリメントし、カウンタが0になった時点で即座にメモリを解放する。リアルタイムに解放できるが、循環参照(A→B→A)があるとカウンタが0にならず解放できないという弱点がある。

なぜ イ は間違いか

これはマーク&スイープ法の説明。ルートオブジェクトから到達可能なオブジェクトをマークし、未マーク(到達不能)オブジェクトを解放する手法であり、参照カウント法とは別のGCアルゴリズム。

なぜ ウ は間違いか

これはコピーGC(Semispace GC)の説明。ヒープを2つの領域に分け、生存オブジェクトを一方から他方にコピーする手法。参照カウント法とは無関係。

なぜ エ は間違いか

LRU(最近最も使われていない)キャッシュ置換アルゴリズムの説明に近い。GCの手法としては存在せず、参照カウント法とは全く異なる概念。

出典: AI生成問題(学習用)