このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

メモリリーク

  • メモリリークとは、PCが動作している際に、主記憶の使用可能な容量が減っていく現象のことである。メモリリークの発生により、PCの性能が低下したり、不安定になったりする。
  • メモリリークはOSやアプリケーションが処理のために占有したメモリ空間が、解放されないまま残ってしまうために起こる。これを解消するためにはPCを再起動する必要がある。
  • メモリリークは普通それ自身が明らかなエラーとして現れないので、ずっとシステムに存在してしまうかもしれない。
  • クラスが独自のメモリを管理しているときは、プログラマはメモリリークに対して注意を払うべきである。

メモリリークの原因

  • 廃れた参照(もう決してそれを通してオブジェクトが参照されることのない単なる参照のこと)を保持すること
    • 廃れた参照にnullを設定することで、ガベージコレクタ対象にすることができる。
    • よりよい方法は、廃れた参照が含まれている変数をスコープの外に出すことである。
  • キャッシュ
    • オブジェクト参照を一旦キャッシュへ入れてしまうと、オブジェクト参照がそこにあることを忘れがちであり、そのオブジェクト参照の意味はなくなった後でもキャッシュに残ったままになってしまいがちである。
  • リスナーやコールバック
    • コールバックが不要になったときに明示的にコールバックの登録を解除しないと、何らかの処理を行わないとコールバックが蓄積されてしまう。
      • 迅速にコールバックがガベージコレクトされることを保障する方法は、それらに対する弱い参照だけを保存することである。

メモリリークを発見する

  • 注意深いコードレビュー
  • ヒーププロファイラ(heap profiler)というデバッグツールを利用

参考文献

  • 『Effective Java』