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 件のコメント:
コメントを投稿