プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

ヒープ容量を詳細に確かめる方法

端末スペック一覧の、ヒープ容量の項目欄で[Javaヒープ/ネイティブデータヒープ]と記載されている端末では実行時にどちらがどれくらい利用されるのか分からなかったので、MemoryManagerで調べてみました。

System.gc();

MemoryManager mm = MemoryManager.getMemoryManager();
long[] free = mm.freeMemory();
long[] maxfree = mm.maxContiguousMemory();
long[] total = mm.totalMemory();

for(int i=0; i<free.length; i++){
  System.out.println("\n区画: "+i);
  System.out.println("空き容量: "+free[i]);
  System.out.println("最大連続空き容量:"+maxfree[i]);
  System.out.println("全容量:"+total[i]);
}


とすると、エミュではこんな感じででました。区画0で出てくる容量は、Runtime.getRuntime().freeMemory()と、Runtime.getRuntime().totalMemory()で取得できる容量と同じ。RuntimeではJavaのヒープしか見れません。

区画: 0
空き容量: 7575624
最大連続空き容量:7544600
全容量:8192000

区画: 1
空き容量: 111378432
最大連続空き容量:1000000
全容量:1063698432


エミュで実行するとOutOfMemoryが連発するのでヒープサイズを上げて開発していたのですが、実機で確認してみるとエミュほどメモリが消費されない模様。F端末とかだと 6144/6144 (Javaヒープ/ネイティブデータヒープ) ときちんと分かれていて、両方同じくらい減っているのが確認できました。