AI活用の教科書

メモリリーク

Memory Leakめもりりーく

ひとことで言うと

使い終わったメモリが解放されず、使用量が少しずつ増え続けてしまう不具合のことです。

📖 もうちょい詳しく

何が新しいの?

メモリリークは新しい技術ではなく、昔からあるプログラムの不具合の一つです。プログラムは動くときに、データを置く場所として「メモリ」を借ります。使い終わったら返すのが基本ですが、その返却を忘れたまま借り続けてしまう状態が「メモリリーク」です。

どうやって動いてるの?

プログラムはデータを置くたびにメモリを少しずつ確保します。本来は不要になった時点でそのメモリを解放(返却)します。ところが、どこかから参照が残っていたり、解放の処理が抜けていたりすると、使われていないのに返されないメモリが少しずつたまっていきます。動くたびに増えるので、時間が経つほど使用量がじわじわ膨らんでいきます。

何ができるの?

メモリリークがあると、最初は気づかなくても、長く動かすうちに動作がだんだん重くなります。ひどくなるとメモリが足りなくなり、アプリが固まったり強制終了したりします。原因を見つけて直せば、こうした「だんだん重くなる」「たまに落ちる」といった不安定さを解消できます。

🌱 身近なたとえ

机の引き出しで例えると、書類を出して使ったあと、戻さずに新しい書類をどんどん入れていく状態に似ています。1回や2回なら気になりませんが、戻し忘れが積み重なると引き出しはいっぱいになり、やがて新しい書類が入らなくなります。メモリリークも、この「戻し忘れの積み重ね」がじわじわ効いてくる現象です。

✅ まず覚えるポイント

  • 使い終わったメモリが解放されず、使用量が増え続ける不具合です。
  • 一気にではなく「少しずつ」増えるのが特徴です。
  • 長く動かすほど影響が大きくなり、動作が重くなります。
  • 最悪の場合、メモリ不足でアプリが停止します。
  • 原因の多くは「不要になった参照が残っている」ことです。
  • すぐには気づきにくく、長時間の動作で表面化することが多いです。

🧭 よくある勘違い

メモリリークがあるとすぐに落ちるの?

すぐに落ちるとは限りません。少しずつ増えるため、数時間や数日かけてゆっくり悪化することが多いです。短時間の動作確認では気づかず、本番で長く動かして初めて表面化する場合があります。

再起動すれば直るの?

再起動すると借りていたメモリは一度すべて返るので、症状は一時的に消えます。ただし原因のプログラムは直っていないため、また動かすうちに同じように増えていきます。根本的に直すには、解放されない場所を見つけて修正する必要があります。

自動でメモリを管理してくれる言語なら起きないの?

起きにくくはなりますが、ゼロにはなりません。不要なデータへの参照が残っていると、自動の仕組みでも「まだ使う」と判断して解放されず、リークにつながることがあります。

🧩 関連して覚えると楽な言葉

  • ガベージコレクション: 不要になったメモリを自動で回収してくれる仕組みです。
  • メモリ: プログラムがデータを一時的に置いておく作業場所です。
  • デバッガ: プログラムを止めて中身を調べ、リークの原因を探す道具です。
  • 監視(モニタリング): メモリ使用量の増加を見張り、リークに早く気づくしくみです。

🏁 ひとことでまとめ

返し忘れたメモリがたまって、動くほどジワジワ重くなっていく不具合、それがメモリリークです。