Android + Eclipse Memory Analyzer Tool でメモリリークを調べる☆

hprof.png

HPROFとは

A Heap/CPU Profiling Toolの略である
.hprofファイルを使って色々すると、消費の高いメモリランキングとかができるのだ。

.hprofファイルの取得

]

Tools > Android > Android Device Monitor

を開きます
あとはEclipseと同じ手順

.hprofファイルを使って解析するには?

まず、hprof-convを使ってコンバートする。
hprof-conv.exeはAndroid SDKをダウンロードしたフォルダのtoolsフォルダの下に存在する。
そこに環境変数PATHにパスを通したら、コマンドラインから使える

hprof-conv Dumpしたファイル.hprof 出力名.hprof

出来上がったhprofファイルをjhatコマンドに渡す。

jhat xx.hprof

jhatコマンドを実行後に「http://localhost:7000/」にアクセスすると、ヒープの内容が表示される。
macだったら、そのままターミナルコマンドでMemoryAnalyzerを開くと楽でしょう

open 変換した.hprof /Applications/mat/MemoryAnalyzer.app

MATを使って解析

MATとはEclipseのMemory Analyzerである。
スタンドアロンバージョンをダウンロードするここ
ダウンロードすると、Eclipseなみに重そうなかんじ。
mat.png
Memoryanalyzer.exe&その他もろもろがダウンロードされる。

MATの表の見方

Histgram ヒストグラム

  • Shallow Heap….表面上のヒープ(表層ヒープ(すべてのインスタンスで利用しているメモリの総合計)1つのオブジェクトのみによって消費されるメモリ。1つの参照につき32bit(今回は32bitのプロセッサだから)が消費される。例えば、Integerでは4バイト、Longでは8バイト
  • Retained Heap…保持されたヒープ(保持ヒープ)(他のオブジェクトへの参照をもっているオブジェクトを含めたすべてのインスタンスで生きているメモリの総合計) GCにより除去される一連のオブジェクトが使うShallow Heapの合計。オブジェクトのツリーが直接使っているメモリ

沢山生成されているオブジェクトはどれか?

MATのこのアイコンボタンhistgram.pngを押すと、生成されたオブジェクトのヒストグラムが見れるよ★
単位は、カンマ,で区切ってあるところがキロバイトである。

遭遇したエラー

「Dump HPROF file」ボタンを押すと端末がオフラインになる

100文字以上のオブジェクトを見つける方法

OQLを使って色々なSQL文を使うことによりできます
http://andbrowser.com/development/knowhow/289/eclipse-android-memory-leak-mat-oql/


android-measure android-memory java-debug mat

サポートサイト Wikidot.com android-measureandroid-memoryjava-debugmat