ガベージコレクションはゴミ集めを意味し、ヒープ領域に残った不要なインスタンスを自動的に削除する仕組みのこと。
誰がガベージコレクションを実行するのか
これはガベージコレクタと呼ぶ専用のプログラムが行う。このプログラムはプログラミング言語の実行環境が提供するもので、独立したスレッドとして動作する。
このプログラムは適切なタイミングでヒープ領域の状態を調べ、空きメモリ領域が少なくなったことを検知すると実際のガベージコレクション処理を起動する。
ガベージコレクタはどうやって不要なインスタンスを判断するのか
ガベージコレクタは、スタック領域とメソッドエリア(静的領域)から辿れなくなった不要なインスタンスを削除する。
オブジェクト指向プログラミングを使って書いたアプリケーションでは、クラスからインスタンスを作り、そのインスタンスに対してメソッドを起動することで動作する。そしてインスタンスはさらに別のインスタンスを参照することができる。
オブジェクト指向プログラミングを使って書いたアプリケーションはたくさんのインスタンスを作るが、それらが参照しあって全体としてネットワークを構成する。
このインスタンスのネットワークはヒープ領域だけでなく、スタックとメソッドエリア(静的領域)も関わる。
スタックとメソッドエリアはアプリケーション処理で必要な情報のため、ここから参照されているインスタンスはガベージコレクタの対象にならない。
プログラミングをする上で気をつけるべきことは、不要になったインスタンスをスタックやメソッドエリアから参照し続けないようにすること。しかしこれは気づきづらいものなので、メモリの使いすぎを防ぐためのアプリケーションを見直すポイントして覚えておく。