基本情報技術者試験 練習問題 19:メモリ管理とガベージコレクション
ガベージコレクション(GC)について述べた文として、正しいものはどれか。
- ガベージコレクションはメモリ領域から不要な(参照されない)オブジェクトを自動的に検出し、メモリを解放する機構である。
- ガベージコレクションにより参照カウント方式が完全に排除され、メモリリークは発生しなくなる。
- ガベージコレクション中は一時的にプログラムが停止する可能性があり、このを「GCストップ・ザ・ワールド」と呼ぶ。
- 世代別GCは新規生成オブジェクトがより頻繁に回収されるため、実行時間が常に短縮される。
- ガベージコレクションはJavaやPythonのみで実装され、C/C++では利用できない。
正解と解説を見る
正解:ガベージコレクションはメモリ領域から不要な(参照されない)オブジェクトを自動的に検出し、メモリを解放する機構である。
ガベージコレクション(GC)はメモリ管理を自動化する仕組みで、メモリリークの防止に貢献します。
GCの基本的な動作:
プログラムが使用するメモリは以下のように遷移します:
1. プログラムがオブジェクトを生成 → ヒープメモリに割り当て
2. オブジェクトへの参照がなくなる(どこからも参照されない)
3. GCが「到達不可能」なオブジェクトを識別
4. GCがメモリを自動的に解放
正しいのは「ガベージコレクションはメモリ領域から不要な(参照されない)オブジェクトを自動的に検出し、メモリを解放する機構である」です。
GCの実装方式:
参照カウント方式:各オブジェクトの参照数をカウント。参照数がゼロになったらメモリ解放。循環参照でリークする可能性。
マーク・スイープ:実行可能なオブジェクトをマークして、マークされていないオブジェクトを削除。
世代別GC:新規オブジェクトはより頻繁に回収候補になる(若いオブジェクトほど寿命が短い傾向があるため)。このため平均的にGC時間が短縮される可能性が高い。
GCストップ・ザ・ワールド:
GC実行中にプログラムが一時停止する現象。この間、ユーザー操作への応答遅延が発生します。
GC対応言語:Java、Python、C#、Ruby、Go等。C/C++でも外部ライブラリで実装可能。