※当サイトではアフィリエイト広告を利用しています
「ガーベジコレクション」という言葉を聞いて、すぐに説明ができますか?
分かるようで分からない、しかも次々と登場していくIT用語。
業界について勉強し始めたばかり!という方にも分かりやすいようにまとめました。
これで「ガーベジコレクション?聞いたことはあるけどよく知らない」から卒業しましょう!
今回は、ガーベジコレクションについて解説したいと思います。
ガーベジコレクションとは
ガーベジコレクションとは、アプリケーションソフトウエアの実行の際には「メモリ領域」を使用して実行しますが、一度使ったメモリ領域を開放することです。
ガーベジコレクション=Garbage Collection=ごみ収集(英)が原義です。
メモリ領域においては、アプリケーションソフトウエア内のプログラムが実行されると、しばらくは参照と言って動作のために使われます。
しかし、プログラムの実行回数が重なると、古いメモリ領域にある「インスタンス」(プログラムの一行、と考えておいてよいでしょう)は参照されなくなります。
参照されなくなった古いインスタンスがたまってしまうと、最後にはメモリがいっぱいになり、「メモリリーク」というソフトウエアの実行ができない状態に陥ります。
ガーベジコレクションは、メモリリークの状態になってしまうことを避けるために、すでに利用して動かすことができないメモリ領域をアプリケーションソフトウエア実行前の状態に戻すことを言います。
より具体的にはメモリから参照されないインスタンスをメモリから削除することを意味しています。
ガーベジコレクションの実装
ガーベジコレクションは、例えば、Javaや、Pythonのような言語では、言語処理の中に組み込まれています。
これらの言語では「古いインスタンスを消す」指令を含んだインスタンスを実行すると、自動的にメモリ領域が確保できるようになっています。
これに対して、先ほどもあげましたように、C言語などでは、ガーベジコレクションが言語処理の中には組み込まれていません。
そこで、メモリリークを防ぐためには、ライブラリ形式でガーベジコレクションを参照できるようにしておきます。ライブラリを呼び出し、古いインスタンスを消すことで、メモリが開放されます。
なお、メモリリークの状態にはならないまでも、メモリ領域が少なくなってくると、コンピュータはパフォーマンスが落ちてしまいます。
そこで、通常ガーベジコレクションは、そもそもあまりメモリを使わないようにする技術と組み合わせて使われるようになりました。
ガーベジコレクションと組み合わせて使われるメモリ確保の仕組み
メモリをコピーして、一つのメモリ領域が不足しないうちにコピーを使ってメモリの空き領域をなるべく大きく確保する技術があります。
こうしたコピーは、ガーベジコレクションライブラリの参照とともに使われることも、また、ガーベジコレクションが自動で行われる言語でも使われます。
メモリが不足するたびに、ライブラリからガーベジコレクションを呼び出し、メモリを管理して空き領域を確保することは、コンピュータのユーザーにとって大変面倒です。
メモリコピーをしておくと、管理の時間や手間は減らせます。
メモリコピー以外にも、記憶媒体の上にいくつか分散させてアプリケーションソフトウエアの実行領域をつくるメモリ分散によっても、メモリ領域の確保はより大きくでき、コピーと同様の効果を得ることができます。
このように、メモリ領域の確保のための技術+ガーベジコレクションの組み合わせで、なるべくメモリ管理に手間と時間を取られないように工夫がなされています。