対象試験と出題頻度
ガベージコレクションは、応用情報技術者で出題されるテーマです。
主記憶管理の分野で、メモリコンパクションやフラグメンテーションとの区別を問う問題が定番化しています。
詳細をクリックして確認
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
ガベージコレクションの定義
情報処理試験を勉強していると、「ガベージコレクションとメモリコンパクションって何が違うの?」と混乱しがちです。
ガベージコレクション(Garbage Collection:GC)とは、一言で言うと
「プログラムが使わなくなったメモリ領域を自動で回収し、再利用可能にする仕組み」
のことです。
イメージとしては、「ショッピングモールのフードコートにいる清掃スタッフ」です。
お客さんが食べ終わって席を離れると、清掃スタッフがトレーや食器を片付けて、次のお客さんが座れるようにしてくれます。お客さん自身は「片付けてください」と頼む必要がありません。
ガベージコレクションも同じで、プログラマが明示的に「このメモリを解放する」と書かなくても、使われなくなった領域を自動的に回収してくれる仕組みです。
📊 ガベージコレクションの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Garbage Collection(GC) |
| 直訳 | ごみ集め |
| 分類 | 主記憶管理(メモリ管理)の機能 |
| 対象領域 | ヒープ領域(プログラムが動的に確保するメモリ) |
| 採用言語の例 | Java、Python、Go、C# など |
解説
なぜ自動回収が必要なのか
プログラムは実行中に変数やオブジェクトを次々と作成し、その都度主記憶上のヒープ領域にメモリを確保します。
処理が終われば不要になりますが、C言語のように手動で解放する言語では、プログラマが解放し忘れると不要な領域が蓄積し続けます。この現象が「メモリリーク」です。
メモリリークが進行するとやがて空き領域がなくなり、プログラムが異常終了します。この問題を根本から防ぐために、「不要な領域を言語処理系が自動で検出・回収する」ガベージコレクションが登場しました。
図解:GCの動作イメージ
ヒープ領域の変化(GC実行前 → 実行後)
【GC実行前】
🔴 赤=どこからも参照されていない不要領域
【GC実行後】
⬜ 不要領域が回収され、空き領域として再利用できる
混同しやすい関連用語との比較
主記憶管理の分野には似た名前の用語が多く、正確に区別することが理解の要です。
| 用語 | 何をするか | ひっかけポイント |
|---|---|---|
| ガベージコレクション | 不要になったヒープ領域を回収し再利用可能にする | 回収対象は「不要領域」 |
| メモリコンパクション | 断片化した空き領域を寄せ集めて1つの連続領域にする | 対象は「既に空いている断片」 |
| フラグメンテーション | 割当てと解放の繰り返しで生じるメモリの断片化現象 | 「解決策」ではなく「問題」 |
| メモリリーク | 解放し忘れた領域が蓄積し空きが減る不具合 | GCがあれば原則発生しない |
ここだけは確実に押さえてください。
ガベージコレクションは「不要領域の回収」、
メモリコンパクションは「断片の整理」です。
目的も操作対象も異なります。
もう少し詳しく知りたい方はこちら
代表的なGCアルゴリズム
マーク&スイープ方式は、まずルート(グローバル変数やスタック上の参照)から到達可能なオブジェクトすべてに「マーク」を付け、マークのないオブジェクトを「スイープ(掃除)」して回収します。最も基本的なアルゴリズムで、多くの言語処理系の土台になっています。
参照カウント方式は、各オブジェクトが「自分を参照しているポインタの数」をカウンタで管理し、カウンタが0になった時点で即座に回収します。リアルタイム性に優れますが、オブジェクト同士が互いを参照する「循環参照」を検出できない弱点があります。
試験ではここまでの詳細は問われません。「GC=不要メモリの自動回収」と押さえておけば得点に支障はありません。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 ガベージコレクションの核心を3行で
・プログラムが使わなくなったヒープ領域を自動で回収し再利用可能にする仕組み
・手動解放の必要がないため、メモリリークの防止に直結する
・メモリコンパクション(断片の整理)やフラグメンテーション(断片化現象)とは役割が異なる
試験ではこう出る!
ガベージコレクションは、応用情報技術者の午前問題で「主記憶管理に関する記述として適切なものを選べ」という形式で繰り返し出題されています。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP R3春期 午前 問18 |
主記憶管理に関する4つの記述から適切なものを選ぶ。 | ・「ヒープ領域を回収して再度使用可能にする」が正解 ・可変区画方式、動的リンキング、動的再配置の説明を入れ替えたひっかけ |
| AP R2秋期 午前 問16 |
どこからも利用されない記憶領域を再び利用可能にする機能を選ぶ。 | ・ガベージコレクションが正解 ・スタック、ヒープ、フラグメンテーションがひっかけ |
| AP H28秋期 午前 問16 |
R3春期 問18と同一構成の問題(流用)。 | ・選択肢の文言もほぼ同一 ・FE/APで同じ問題が出回る典型例 |
| AP H25秋期 午前 問18 |
R2秋期 問16と同一構成の問題(流用)。 | ・こちらもスタック・ヒープ・フラグメンテーションとの4択 |
📝 IPA試験での出題パターン
パターン1:「記述として適切なものを選べ」
主記憶管理に関する4つの記述が並び、正しいものを選ぶ形式。ガベージコレクション以外の選択肢では、メモリコンパクションの説明を「可変区画方式」と言い換えたり、動的リンキングと動的再配置の説明を入れ替えたりするパターンが定番です。
パターン2:「再利用可能にする機能はどれか」
問題文に「どこからも利用されない記憶領域を再び利用可能にする」と書かれ、機能名を4択から選ぶ形式。スタック(データ構造)、ヒープ(メモリ領域の名称)、フラグメンテーション(断片化現象)は機能ではないので除外できます。
試験ではここまででOKです。GCのアルゴリズム(マーク&スイープなど)の詳細まで問われることはないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. プログラム実行時の主記憶管理に関する記述として、最も適切なものはどれでしょうか?
- A. 主記憶の断片的な空き領域を寄せ集め、1つの連続した空き領域にすることを、ガベージコレクションという。
- B. プログラムが使用しなくなったヒープ領域を回収して再度使用可能にすることを、ガベージコレクションという。
- C. メモリの割当てと解放を繰り返すことで生じる、主記憶上の使えない断片的領域のことを、ガベージコレクションという。
正解と解説を見る
正解:B
解説:
ガベージコレクション(GC)は、プログラムが動的に確保したヒープ領域のうち不要になった部分を自動で回収し、再利用可能にする機能です。
選択肢Aはメモリコンパクション(デフラグメンテーション)の説明です。断片化した「既に空いている領域」を結合して連続化する処理であり、「不要領域の回収」とは異なります。選択肢Cはフラグメンテーション(断片化)の説明です。フラグメンテーションは「問題現象」そのものであり、回収や解決を行う「機能」ではありません。
よくある質問(FAQ)
Q. GCがあるのにメモリリークが起きることはありますか?
あります。GCは「どこからも参照されていない」オブジェクトを回収する仕組みです。プログラム上で不要にもかかわらず参照を保持し続けている場合、GCは「まだ使われている」と判断して回収しません。Javaでは、staticなコレクションにオブジェクトを追加し続けて参照を外し忘れるケースが典型的な原因です。
Q. C言語にはGCがないのですか?
C言語の標準仕様にはGCは含まれていません。プログラマがmalloc()でメモリを確保し、free()で明示的に解放する必要があります。この手動管理は高いパフォーマンスを得られる反面、解放忘れや二重解放といったバグの原因になります。C言語でGCを導入するサードパーティ製ライブラリ(Boehm GCなど)は存在しますが、言語の標準機能ではありません。
Q. GCが実行されるとプログラムの動作は遅くなりますか?
GCの実行中はプログラムの処理が一時停止(Stop The World)する場合があり、リアルタイム性が求められるシステムでは注意が必要です。この一時停止を短縮するために、世代別GCやコンカレントGCといった改良アルゴリズムが実用化されています。ただし、IPA試験の範囲で性能面のデメリットまで問われることは稀です。
Q. ガベージコレクションとデフラグの違いは何ですか?
GCは「不要なオブジェクトを検出して回収する」処理で、対象はプログラムのヒープ領域です。一方デフラグ(メモリコンパクション)は「既に空いている断片的な領域を寄せ集めて連続化する」処理で、回収済みの空き領域を再配置する点が異なります。試験ではこの2つを入れ替えたひっかけ選択肢が頻出するため、「回収」と「整理」の違いを意識してください。