我想知道如何确定堆基地址和堆大小
我希望能够转储我的应用程序堆,
有什么办法吗?
另外当我尝试通过/ proc / pid / maps读取进程内存映射时,我不明白 [heap]部分,为什么?
DVM是否使用mmap分配匿名区域?
如果是,我该如何跟踪它们?
答案 0 :(得分:0)
我想知道如何确定堆基地址和堆大小
我希望能够转储我的应用程序堆,
有什么办法吗?
public static void logHeap() {
Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576));
Double available = new Double(Debug.getNativeHeapSize())/1048576.0;
Double free = new Double(Debug.getNativeHeapFreeSize())/1048576.0;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
Log.d("tag", "debug. =================================");
Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)");
}
DVM是否使用mmap分配匿名区域?
如果是,我该如何跟踪它们?
答案 1 :(得分:0)
在linux API中,您可以使用showmap转储堆大小信息,该部分是 / ashmem / dalvik-heap 。 Android DDMS为我们提供了两种分析Java堆和Native堆的工具。 Java Heap是Android Hprof,本机堆是本机堆分析。