Dalvik堆大小和堆基数

时间:2014-04-06 19:07:46

标签: android memory-management malloc dalvik

我想知道如何确定堆基地址和堆大小

我希望能够转储我的应用程序堆,

有什么办法吗?

另外当我尝试通过/ proc / pid / maps读取进程内存映射时,我不明白 [heap]部分,为什么?

DVM是否使用mmap分配匿名区域?

如果是,我该如何跟踪它们?

2 个答案:

答案 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分配匿名区域?

     

如果是,我该如何跟踪它们?

阅读https://source.android.com/devices/tech/dalvik/index.html

答案 1 :(得分:0)

在linux API中,您可以使用showmap转储堆大小信息,该部分是 / ashmem / dalvik-heap 。 Android DDMS为我们提供了两种分析Java堆和Native堆的工具。 Java Heap是Android Hprof,本机堆是本机堆分析。