不要になったデータを解放してデータ領域を利用可能な状態に戻すこと、もしくはその行為。
原義は "ゴミ集め" の意。
動的なメモリー取得機能を持ったプログラミング言語のうち、CやC++といった言語では、確保したメモリーの管理はプログラマーがする。
すなわち、不要になったデータ領域は、プログラマーが明示的に開放する必要があった。例えばC++なら、new演算子によって確保されたオブジェクトは、「必ず」delete演算子によって解放する必要がある。
しかしこれは往々にして遂行されず、開放が忘れられたオブジェクトはいつまでもメモリー上に残り続け、必然的にデストラクターも呼び出されない。これをメモリーリークといい、メモリーリークが発生すると解放されないリソースが生じることになる。
メモリーリークは頻繁に発生し、かくして、プログラマーを悩ませ続けた。
利点と欠点は次の通りである。
動的メモリーの確保時に、データ本体と別に参照情報も持たせることでデータの要不要を判定できるようにする。状況に応じて不要になったデータ領域を解放し、再び利用可能な状態にする。
不要メモリーを解放しただけでは領域が断片的に分散する形になってしまう(断片化)ため、データ領域を再配置して領域をまとめる機能を持っているのが普通である。
インタープリター型言語に多い。
コンパイル型言語に少ないのは、動的メモリーの確保に関してオペレーティングシステムの支援を直接受けるため、ガベージコレクションを実現させるのはあまり合理的でないためと考えられる。
また、.NET Framework環境では、言語仕様としてより、環境仕様としてガベージコレクションに対応している。.NET用言語は全てが対応するが、以下には主要なもののみを例示した。