【问题标题】:Dalvik heap size and heap baseDalvik 堆大小和堆基数
【发布时间】:2014-05-18 21:08:39
【问题描述】:

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

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

有什么办法吗?

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

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

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

【问题讨论】:

标签: android memory-management malloc dalvik


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    有什么办法吗?

    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

    【讨论】:

    • 嗨,您能否提供有关 logHeap() 的更多详细信息?什么是硬编码数字,如何提取堆基数和堆大小?
    • 在评论中有很多要解释的......请阅读stackoverflow.com/questions/2298208/…
    • 如果对你有帮助,请告诉我:)
    • 还是不明白如何获取堆基地址,堆在内存中是连续的吗?
    • 如果你想遍历堆,你需要了解堆的结构。为此,您需要阅读并理解相关的 Dalvik 源代码。如果这样做,您将看到堆是如何分配的以及如何使用 mspace。 VM 中存在用于遍历堆并发出 hprof 转储的详细信息的代码;跟着那个。并且要明白,当新版本的 Android 发布时,这一切都可能发生变化。
    猜你喜欢
    • 2013-11-12
    • 2013-10-21
    • 2010-12-29
    • 2021-03-26
    • 2018-04-14
    • 2014-10-08
    • 2021-03-15
    • 2012-09-23
    相关资源
    最近更新 更多