ICDロゴ

ガーベジ・コレクション (garbage collection)

別名
GC (Garbage Collection) 【ジー・シー】

最終更新日: 2001/06/22

 プログラムの実行中に使用されなくなったメモリを自動的に見つけ出し、再利用できるようにするための機構。通常、ガーベジ・コレクションの機能はランタイム・エンジンやライブラリにより実装される。省略して単に「GC」と呼ばれることもある。

 ガーベジ・コレクションの機能を持たないC言語やC++言語では、プログラマが必要に応じてメモリ領域の確保を行い、一連の処理を終えた後、不要になったメモリ領域を明示的に解放する。しかしこのようなメモリの解放処理は、しばしば忘れられ、未使用であるにもかかわらず、解放されないメモリ領域を作り出しやすい。この種のバグはメモリ・リーク(memory leak、「leak」は「漏れ」という意味)と呼ばれ、プログラムが実行されてからある程度時間が経たないと発見されにくい、たちの悪いバグである。また、すでに解放されているにもかかわらず、そのメモリ領域にアクセスしてしまうようなバグもよくある。

 JavaやC#などの新しい言語処理系では、このようなバグをなくし、メモリ管理を単純化するために、ガーベジ・コレクションが言語処理系の機能として導入された。これによりプログラマは、確保したメモリ領域を自身で明示的に解放する必要がなくなった。同時に、これらの言語では、物理的なメモリ・アドレスを指すポインタの使用が言語仕様から削除され、代わりにメモリ領域への「参照」によりメモリへのアクセスを行う(C#では明示的にガーベジ・コレクションを回避し、物理メモリへアクセスする方法も残されている)。

 ガーベジ・コレクションの機能を備える処理系では、アドレス空間内の連続領域がメモリ割り当てのためにヒープ・メモリ(heap memory)として管理される。プログラムからnew演算子などによりメモリ領域が要求されると、このヒープ・メモリの一部が割り当てられる(このヒープ・メモリの一領域を指す識別子が参照である)。このような割り当てを繰り返しているとヒープ・メモリはやがて尽きてしまうが、ヒープ・メモリの中にはもうプログラムからは使用されていない、つまりコード中のどこからも参照されていない領域が「ガーベジ」(ゴミという意味)として存在している可能性がある。このような領域を集め、連続した空き領域を作り出す処理が「ガーベジ・コレクション」(ゴミ集めという意味)である。ガーベジ・コレクションの処理においては、システムに負荷をかけたりプログラムの実行を中断したりせずに、いかにしてヒープ・メモリ内の参照されていないメモリ領域を探し出すかが非常に重要なポイントとなる。

Copyright (C) 2000-2007 Digital Advantage Corp.

アイティメディアの提供サービス

キャリアアップ