問題

プログラミング言語処理系におけるガベージコレクション(GC)に関する記述として、適切なものはどれか。

ア)ガベージコレクションは、プログラムが使用するメモリ領域をあらかじめすべて確保しておき、実行中は一切メモリの追加確保を行わない仕組みである。

イ)ガベージコレクションは、プログラムから参照されなくなった不要なメモリ領域を自動的に検出し、解放する仕組みである。

ウ)ガベージコレクションを備えた言語では、メモリリークは原理上一切発生し得ない。

エ)ガベージコレクションの実行中は、システム全体の処理に一切影響を与えない。

解答・解説を見る

正解: イ)

解説:

  • ア)ガベージコレクションはメモリの動的な確保・解放を前提とした仕組みであり、「あらかじめすべて確保し追加確保を行わない」という説明は誤りです。
  • イ)ガベージコレクションは、プログラム実行中にどこからも参照されなくなったオブジェクト(不要になったメモリ領域)を自動的に検出し、解放することで、メモリリークやメモリ不足を防ぐ仕組みです。正解です。
  • ウ)ガベージコレクションを備えた言語であっても、意図せず不要なオブジェクトへの参照を保持し続けてしまう(例えばコレクションに要素を追加し続け削除し忘れる等)ことで、論理的なメモリリークが発生し得ます。「一切発生し得ない」は誤りです。
  • エ)ガベージコレクションの実行(特にストップ・ザ・ワールド方式のGC)は、実行中に他の処理を一時停止させることがあり、システムの応答性能に影響を与える場合があります。「一切影響を与えない」は誤りです。

重要キーワード

用語説明
ガベージコレクション不要になったメモリ領域を自動的に解放する仕組み
メモリリーク不要になったメモリが解放されず消費され続ける状態
ストップ・ザ・ワールドGC実行中に他の処理を一時停止させる方式
参照カウント方式オブジェクトへの参照数を管理しGCを行う方式の一つ