ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
プログラムで動的に確保されたデータ領域のうち、不要になったものを自動的に解放する、機能や動作。英語の原義は「ゴミ集め」。
動的なメモリー取得機能を持ったプログラミング言語のうち、CやC++といった言語では、確保したメモリーの管理はプログラマーがする。
すなわち、不要になったデータ領域は、プログラマーが明示的に開放する必要があった。例えばC++なら、new演算子によって確保されたオブジェクトは、「必ず」delete演算子によって解放する必要がある。
しかしこれは往々にして遂行されず、開放が忘れられたオブジェクトはいつまでもメモリー上に残り続け、必然的にデストラクターも呼び出されない。これをメモリーリークといい、メモリーリークが発生すると解放されないリソースが生じることになる。
メモリーリークは頻繁に発生し、かくして、プログラマーを悩ませ続けた。
オブジェクト指向プログラミングが主流になると、データ開放のタイミングを正しく認識し、プログラムでそれが正しく行なわれるよう記述する、という行為自体が難しいものとなった。
さらには、マルチスレッドに対応したプログラムとなると、もはや人間の理解を超えたものとなった。
そこで、近年のプログラミング言語は言語仕様でガベージコレクション機能を持たせる事が多くなったのである。
利点と欠点は次の通りである。
動的メモリーの確保時に、データ本体と別に参照情報も持たせることでデータの要不要を判定できるようにする。状況に応じて不要になったデータ領域を解放し、再び利用可能な状態にする。
不要メモリーを解放しただけでは領域が断片的に分散する形になってしまう(断片化)ため、データ領域を再配置して領域をまとめる機能を持っているのが普通である。
インタープリター型言語に多い。
コンパイル型言語に少ないのは、動的メモリーの確保に関してオペレーティングシステムの支援を直接受けるため、ガベージコレクションを実現させるのはあまり合理的でないためと考えられる。
また、.NET Framework環境では、言語仕様としてより、環境仕様としてガベージコレクションに対応している。.NET用言語は全てが対応するが、以下には主要なもののみを例示した。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます