Android Dalvik堆大小和堆基

Android Dalvik堆大小和堆基,android,memory-management,malloc,dalvik,Android,Memory Management,Malloc,Dalvik,我想知道如何确定堆基址和堆大小 我希望能够转储我的应用程序堆 有什么办法吗 另外,当我试图通过/proc/pid/maps读取进程内存映射时,我看不到 [堆]部分,为什么 DVM是否使用mmap分配匿名区域 如果是,我如何跟踪他们 我想知道如何确定堆基址和堆大小 我希望能够转储我的应用程序堆 有什么办法吗 DVM是否使用mmap分配匿名区域 如果是,我如何跟踪他们 阅读在linux API中,您可以使用showmap转储堆大小信息,该部分为/ashmem/dalvik heap。 android

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

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

有什么办法吗

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

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

如果是,我如何跟踪他们

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

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

有什么办法吗

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

如果是,我如何跟踪他们


阅读

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

您好,您能提供有关logHeap()的更多详细信息吗?硬编码的数字是多少,如何提取堆基和堆大小?在注释中需要解释很多。。。请阅读这篇文章,让我知道它是否对您有帮助:)但我不知道如何获取堆基址,堆在内存中是否连续?如果您想遍历堆,您需要了解堆的结构。为此,您需要阅读并理解相关的Dalvik源代码。如果您这样做,您将看到如何分配堆以及如何使用mspace。VM中存在用于遍历堆并发出hprof转储详细信息的代码;照这个做就行了。你可以使用内置的hprof工具(例如,从DDMS)转储应用程序的托管堆。有关Dalvik堆的一些技术细节可以从中收集。
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)");
            }