ガベージコレクションとメモリコンパクション
オペレーティングシステム(OS)が持つメモリ管理の機能である「ガベージコレクション」と「メモリコンパクション」、実現方法によってはガベージコレクションと共にメモリコンパクションも行う仕組みのため、メモリコンパクションを含めてガベージコレクションと呼ぶ場合もありますが、厳密には区別されています。
本記事では、ガベージコレクションとメモリコンパクションの違いについて解説していきます。
簡単に説明
- ガベージコレクション:不要になった領域を自動的に解放すること
- メモリコンパクション:メモリの断片化を解消すること
ガベージコレクションとは
ガベージコレクション(英:garbage collection)とは「GC」という略記で表記される言葉で、コンピュータプログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放し、空き領域として再利用できるようにすることをいいます。
スポンサーリンク
garbage collectionは「ごみ収集」の意味を持つ言葉で、その言葉どおり不要になったプログラムを捨て空き領域にします。
上記図は、ガベージコレクションのイメージ例です。処理が終わり不要になったプログラムBとプログラムDの領域を解放し空き領域にしています。
従来はプログラマが明示的にメモリの解放を行う必要があったが、ガベージコレクションが組み込まれているプログラミング言語やフレームワークの場合は、実行中のプログラムの動作から不要になったと判断した領域を自動的に解放します。
メモリコンパクションとは
プログラム内蔵方式という方式を採用しているコンピュータは、プログラムを実行するとき補助記憶装置に保存してあるプログラムを主記憶装置(メインメモリ)にロードしてから実行します。
そして、次の図のようにプログラムBとプログラムDの処理が終わり不要になったら空き領域(明示的にメモリの解放をした もしくは ガベージコレクションにより解放された)に変わります。(※図の例は可変区画方式)
その結果、本来であれば主記憶装置には合計「11MB」の空き領域があるので「10MB」の「プログラムE」をロードできるはずだが、空き領域がバラバラになっているため「プログラムE」をロードできません。
このような現象を断片化(フラグメンテーション)といい、断片化(フラグメンテーション)を解消するための手法がメモリコンパクションです。
次の図は、メモリコンパクションのイメージ例です。
メモリコンパクションでは、主記憶装置にロードされているプログラムを再配置することで、分割されてしまった空き領域を連続したひとつの空き領域にします。
上記図の例では、メモリコンパクションによりバラバラになっていた空き領域がひとつの領域となり、「10MB」のプログラムをロードすることが可能になっています。