不要になったデータを解放してデータ領域を利用可能な状態に戻すこと、もしくはその行為。
原義は "ゴミ集め" の意。
動的なメモリ取得機能を持ったプログラミング言語のうち、CやC++といった言語では動的に確保したメモリの管理はすべてプログラマが行なわねばならない。
すなわち、不要になったデータは、プログラマが明示的にそれを開放する必要があった。しかし、これはメモリリークの発生が懸念される危険なものであった。
また、オブジェクト指向プログラミングが主流になると、データ開放のタイミングを正しく認識し、プログラムでそれを行なわせるという記述をすること自体が難しいものとなった。さらには、マルチスレッドに対応したプログラムとなると、もはや人間の理解を超えたものとなった。
そこで、近年のプログラミング言語は言語仕様でガベージコレクション機能を持たせる事が多くなったのである。
動的メモリの確保時に、データ本体と別に参照情報も持たせることでデータの要不要を判定できるようにする。状況に応じて不要になったデータ領域を解放し、再び利用可能な状態にする。
不要メモリを解放しただけでは領域が断片的に分散する形になってしまう(断片化)ため、データ領域を再配置して領域をまとめる機能を持っているのが普通である。