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的大小.
解决方法
让我们列出dalvik相对内存使用情况的每个部分:
> Dalvik Heap部分(堆管理,GC)
> dalvik-bitmap-1,dalvik-bitmap-2是Dalvik Heap管理数据结构.在Dalvik中,GC是标记的,并且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进行管理.