ガベージコレクション(Garbage Collection: GC)とは、プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能のことです。
プログラムの実行中、データの格納などに必要なメモリ領域を動的に確保することはよくあります。しかし、これらのメモリ領域を使い終わった後、明示的に解放を指示しないと、メモリ領域は使用済み状態のまま残ってしまいます。これをメモリリークと呼び、メモリリークが蓄積されると、システム全体のパフォーマンス低下や、最悪の場合、システムクラッシュを引き起こす可能性があります。
ガベージコレクションは、このようなメモリリークを防ぎ、メモリ領域を効率的に管理するための仕組みです。ガベージコレクターと呼ばれるプログラムが、メモリ領域の使用状況を監視し、不要になった領域を自動的に解放します。
ガベージコレクションの仕組み
ガベージコレクションのアルゴリズムは様々ですが、多くの手法は到達可能性という概念に基づいています。
- ルートオブジェクトの特定: プログラムから直接アクセス可能なオブジェクト(スタック上の変数、グローバル変数など)をルートオブジェクトとして特定します。
- 到達可能性の判定: ルートオブジェクトから参照を辿り、到達可能なオブジェクトをマークします。
- 不要領域の解放: マークされていないオブジェクトは、到達不可能、つまり不要なオブジェクトと判断され、メモリ領域が解放されます。
ガベージコレクションのメリット
- モリ管理の自動化: プログラマーが明示的にメモリ解放を行う必要がなくなり、メモリ管理の手間が軽減されます。
- メモリリークの防止: 不要なメモリ領域を自動的に解放することで、メモリリークを防ぎ、システムの安定稼働を促進します。
- 開発効率の向上: メモリ管理の負担が軽減されることで、開発者は本来の開発作業に集中することができます。
ガベージコレクションのデメリット
- オーバーヘッド: ガベージコレクションの実行には、CPU時間やメモリなどのリソースが消費されます。
- 停止: ガベージコレクションの実行中は、プログラムの実行が一時的に停止する場合があります。
- 予測不能な動作: ガベージコレクションの実行タイミングや停止時間は、プログラムの実行状況によって変化するため、予測が難しい場合があります。
ガベージコレクションを採用しているプログラミング言語
Java、C#、Python、Ruby、JavaScriptなど、多くのプログラミング言語がガベージコレクションを採用しています。