すぐOOMになる!もうVM落ちちゃったじゃない!て、人のタメにHeapSizeの調べ方を書いておく。
ちなみにService系を作っているので基本LogCatに出したりSDcardに書き込む方法を好んで使ってます。長時間に渡って採取する必要が無ければ他の方法を取る方が分かりやすいかも、TraceViewとか使えば良いよ。
NativeHeapSize出力方法
String memory = "Free=" + Long.toString(Debug.getNativeHeapFreeSize() / 1024) + "kb" + // 空きヒープサイズ ", Allocated= " + Long.toString(Debug.getNativeHeapAllocatedSize() / 1024) + "kb" + // 使用中ピープサイズ ", Size=" + Long.toString(Debug.getNativeHeapSize() / 1024) + "kb"; // 確保しているヒープサイズ Log.i("Heap", memory);
端末での計測
メモリをガンガン喰う"ミクのライブ壁紙"で計測してみると、NexusOne(2.2.1)では最大ヒープサイズ4MBくらいに対し、Desire(2.1)だと8MB近く使用している。
同じアプリなのに倍違う原因はJNIの関係か、DesireだとBitmapを読み込む際にやたらメモリを喰ってます。
と、言うこととかが分かるHeapSizeの調べ方でした。