画像ツール一覧

ガベージコレクション

Garbage Collection

DATABASE

実行環境が管理するメモリのうち、プログラムから到達できなくなったオブジェクト等を回収し、再利用できるようにする仕組みです。参照が残っている不要データまで意図を理解して消すわけではありません。

🐾 猫で例えると?

目をまん丸にして、こちらをじっと見つめるアメショの顔のアップ
じっと見つめるお片付けの点検係。まだ使える道が残っているかな?

こちらをじっと見つめるアメショは、まるでお片付けの点検係。この係が調べるのは、データへ進む手掛かりである「参照」をつないで、プログラムからそのデータへたどれるかです。プログラムから参照をたどっても届かないデータの置き場所を回収するのがGC(ガベージコレクション)。単に使っていないだけでなく、参照でたどれるかが判断のポイントです。

🐾 PR

💻 IT現場における「ガベージコレクション」とは?

メモリ管理の方式は言語や実行環境により異なります。Cでは確保と解放を扱い、C++ではRAIIやスマートポインターも利用します。GCを持つJavaScript等でも、不要な参照を保持すればメモリを使い続けるため、リークがなくなるわけではありません。

Java、Python、JavaScriptなどの実行環境にはGCがあり、管理対象のメモリについて、開発者が一つずつ解放する負担を減らします。ただし、方式や回収のタイミングは実行環境によって異なります。不要なデータを参照し続けない設計は、GCがあっても必要です。

⚠️ ガベージコレクションの仕組みと注意点

GCは実行時間やメモリを消費しますが、必ずメモリを使い切るまで待つわけではありません。一部の処理で実行を止める方式に加え、段階的・並行に回収を進める方式もあり、停止時間は実装と負荷で変わります。

// JavaScriptで参照を外す例
let cat = { name: "茶トラ" };
let selected = cat;
cat = null;      // selectedから参照できるので、まだ回収対象にならない
selected = null; // 他に参照がなければ回収可能になる
// この瞬間に必ず回収されるわけではない

処理が重いときは、GC回数だけでなくメモリ使用量の推移、オブジェクトの確保量、停止時間を測ります。参照を切ることは回収の機会を作りますが、すぐにOSへメモリが返るとは限りません。

🛠️ ガベージコレクションと賢く付き合うためのポイント

GCに任せきりにすれば良いというわけではありません。賢く付き合うためのコツを紹介します。

こちらをじっと見つめるアメショのように、メモリが増え続ける原因も観察して探します。GCがあっても、イベントリスナーやキャッシュから参照されているデータは残り得ます。不要な参照と回収時の負荷を調べ、使い終わったデータが手放される設計かを確認しましょう。

参考資料