dalvik-LinearAlloc,dalvik-aux-structure,dalvik-bitmap-1,dalvik-bitmap-2,dalvik-card-table,dalvik-mark-stack和dalvik-zygote中的数据是什么?

时间:2014-03-10 11:55:46

标签: android dalvik ashmem

我在PID上使用showmap命令,我无法理解报告中的这一部分:

 16384     3752      689        0     3132        0      620    4 /dev/ashmem/dalvik-LinearAlloc (deleted)
  2460     1748      934        0      828        0      920   18 /dev/ashmem/dalvik-aux-structure (deleted)
  8192      572      572        0        0        0      572    1 /dev/ashmem/dalvik-bitmap-1 (deleted)
  8192        0        0        0        0        0        0    1 /dev/ashmem/dalvik-bitmap-2 (deleted)
  4100      312      312        0        0        0      312    1 /dev/ashmem/dalvik-card-table (deleted)
502140    14860    14860        0        0        0    14860    3 /dev/ashmem/dalvik-heap (deleted)
  1500      280      280        0        0        0      280    1 /dev/ashmem/dalvik-jit-code-cache (deleted)
174764        0        0        0        0        0        0    1 /dev/ashmem/dalvik-mark-stack (deleted)
 22148    22148     2141        0    20452        0     1696    1 /dev/ashmem/dalvik-zygote (deleted)

我想知道dalvik-LinearAlloc,dalvik-aux-structure,dalvik-bitmap-1,dalvik-bitmap-2,dalvik-card-table,dalvik-mark-stack和dalvik-zygote中的数据。

这些ashmem耗费了数百万字节的内存,我想找到一种缩小这些ashmem大小的措施。

1 个答案:

答案 0 :(得分:9)

showmap正在从一个进程中转储smap数据。 smap 描述了进程的内存区域的细节。在虚拟内存管理系统中,内存可以通过系统API获得,例如 mmap brk 。在通过这些API获取虚拟内存地址后,地址长度将记录在 smap 中。

让我们列出dalvik相对内存使用的每个部分:

  • Dalvik Heap部分(堆管理,GC)
    • dalvik-bitmap-1,dalvik-bitmap-2是Dalvik 管理数据结构。在Dalvik中,GC是 marksweep ,并且8位字节内存将被标记(使用或空闲)作为位图中的一位。这两个位图将用作活动贴图(用于标记@运行时),另一个将用作标记贴图(使用@ GC时间)。
    • dalvik-mark-stack:用于GC标记步骤使用。标记步骤将迭代位图,因此这是一个需要堆栈的广度优先搜索。
    • dalvik-card-table:用于Dalvik Concurrent GC,在位图标记步骤中,该过程将执行其他任务,这将导致使用内存。这些卡表在第一个标记步骤后记录脏记忆。您可以通过搜索标记扫描GC来查看详细信息。
    • dalvik-heap用于进程内存使用
    • dalvik-zygote是洞堆的一部分,不会用于@ GC。所有流程都将共享这些记忆,例如框架资源。
  • dalvik-jit是Dalvik中使用的 jit 内存。 JIT:及时,将dex字节码转换为可由CPU执行的机器码。
  • dalvik-LinearAlloc:是dalvik的perm内存,例如:Method,Class definition datas,thread stack datas。解析类定义后,可以设置这些内存 READONLY
  • dalvik-aux-structure:辅助数据结构,它将压缩方法/类/字符串const引用。这些引用将用于每个dex文件,但这些内存的总和将花费大量内存。所以Dalvik创建了一个tmp内存来共享这些引用。

如果你想分析程序的内存,我建议你在eclipse中使用MAT。和本机堆使用情况一样,您可以使用mmap进行管理。