メモリリークとは?
めもりりーく
メモリリークとは、プログラムが確保したメモリ領域を不要になっても解放せず、使用可能なメモリが徐々に減少していく現象です。
メモリリーク(memory leak)は、コンピュータプログラムが動的に確保したメモリ領域を、不要になった後も適切に解放しないことで起きる問題です。解放されないメモリは他のプログラムや処理に再利用されないため、プログラムの実行が続くにつれてシステムが利用できるメモリ量が徐々に減少していきます。
メモリリークが発生する代表的な原因としては以下が挙げられます。
- 確保したメモリへのポインタを失い、解放できなくなるケース(CやC++など手動メモリ管理言語に多い)
- 循環参照:2つのオブジェクトが互いを参照し合い、ガベージコレクタが回収できない状態
- イベントリスナーやコールバックの解除忘れ(JavaScriptのウェブアプリなどで発生しやすい)
- グローバル変数やキャッシュへの無制限な蓄積
メモリリークはすぐに致命的な障害を引き起こすとは限りませんが、長時間稼働するアプリケーションやサーバーでは深刻な問題となります。症状としては、プログラムの動作が時間とともに遅くなる、やがてメモリ不足でクラッシュする、OSがスワップを多用して全体的にパフォーマンスが低下するなどが見られます。
検出には、プロファイラやメモリ監視ツール(Valgrind、Chrome DevToolsのメモリタブ、Java VisualVMなど)を使います。Javaや最近の高水準言語ではガベージコレクタが多くのケースを自動処理しますが、設計上の誤りによってリークが生じることは依然としてあります。
使い方・例文
長期間稼働するウェブサーバーで「時間が経つにつれてレスポンスが遅くなり、定期的に再起動しないと安定しない」という症状が出たとき、メモリリークが疑われます。
この用語をシェア
最終更新: