2014年11月4日火曜日

Android OutOfMemory (メモリリーク) の調査方法

Android メモリリークの調査方法のメモ


1.エミュレータでアプリケーションを起動

2.DDMSを起動して、注目するアプリケーションのパッケージのスレッドを選択し、UpdateHeapを選択する。

3.いろいろ操作、リークの可能性がある箇所がわかっている場合、その周辺を重点的に
 ちなみに、画面の向きを90度回転させるには、Ctrl + F11

4.アプリケーションを閉じる。アプリケーションが全面に無い状態にすること。

5.DDMS上でGCを実施する。

6. Dump HPROF Fileを実施し、hprofファイルを出力する。
hprofはJava標準のプロファイラ

7.hprof-convコマンドで標準hprofファイルを作成し、jhatで解析する。
・hprof-convはAndroid SDKに付属する。
・jhatはJavaSDKに付属する。

> hprof-conv jp.mixi.assignment.controller.adv2.hprof adv2.hprof

> jhat adv2.hprof

8.http://localhost:7000 にアクセスして、jhatの解析結果を確認する。

パッケージごとに解析できたクラスが表示される。
自分のアプリケーションのクラスを確認して、References to this object を探す。
References to this objectには、リンクが残り、メモリにインスタンスが配置されたままであることを示す。

ActivityがDestroyされた場合、GCで回収されるはずなので、リークしていると考えられる。

どこから参照されているかは excludes weak refs (外部弱参照)で確認する。
外部参照を見つけたら、参照を破棄するなどの対策を行う。

ブロードキャストレシーバーなど、リークのつくりやすい例で試すと良い。


0 件のコメント:

コメントを投稿