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