
ガーベジコレクションとは何か?
ガーベジコレクション(GC)は、プログラムが使わなくなったメモリを自動で見つけ出し、回収する仕組みです。
例えば、ゲームやアプリを使っているとき、新しいデータを保存したり処理したりしますよね。でも古くなったデータやもう使わないデータがメモリに残っていると、その分だけメモリがいっぱいになってしまいます。
このような不要なメモリを手動で消すのは大変なので、プログラムが自動でやってくれるのがガーベジコレクションです。
この仕組みがあると、プログラマーはメモリ管理を気にせずにコードを書けるため、バグも減りやすくなります。
ガーベジコレクションは使われなくなったオブジェクトやデータを検出し、それらを解放(=メモリを戻すこと)します。これにより、プログラムが長時間動いてもメモリ不足になりにくくなります。
メモリコンパクションとは何か?
メモリコンパクションは、ガーベジコレクションで空いたメモリの断片を整理して、一つにまとめる作業のことです。
たとえば、部屋の床に散らばった小さなゴミを拾ってまとめてゴミ箱に入れるイメージです。
メモリには使用中のデータと空いている部分がランダムに存在し、この状態を「メモリの断片化」と言います。
断片化が進むと、大きなメモリのかたまりを確保したい時に難しくなります。
そこでメモリコンパクションが必要となり、メモリ上の使われているデータを移動して空き領域を連結し、効率よくメモリを使えるようにします。
つまりメモリコンパクションは、ガーベジコレクションで得られた空きメモリを効率的に使える形に整える処理なのです。
これにより、大きなデータの割り当てや高速な動作を実現しやすくなります。
ガーベジコレクションとメモリコンパクションの違いを分かりやすく説明
ここまで説明したように、ガーベジコレクションは不要なメモリを見つけて回収する作業、メモリコンパクションは回収した空きメモリを整理して連続化する作業です。
両方ともメモリ管理に欠かせない処理ですが、目的が異なります。
以下に違いを簡単にまとめました。
このようにどちらもメモリを有効活用するために大事な仕組みですが、ガーベジコレクションが行われたあとに、必要に応じてメモリコンパクションが実行されることが多い
まとめると、
・ガーベジコレクションは不要物の回収
・メモリコンパクションは回収後の整理整頓
というイメージで考えるとわかりやすいでしょう。
ガーベジコレクション(GC)では、自動で不要なメモリを回収しますが、実はこの作業だけではメモリの断片化を防げません。断片化が進むと、空いているメモリが小さな塊に分かれてしまい、大きなデータを保存するときに足りなくなることがあります。だからGC後には、メモリコンパクションという“お片付け”作業が必要になるんです。回収した空き場所を一つにまとめて、もっと効率よくメモリを使えるようにするんですね。ちょっとしたチームワークみたいで面白いですよね!
前の記事: « 初心者必見!プリミティブ型と参照型の違いをわかりやすく解説