原标题:ADB shell dumpsys meminfo内存测试指标解析(原创)
网上资料中有很多说明,但是没有解析的太清楚,我这里分析汇总了一下。供大家参数。学习知识,要关注细节,懂与不懂差很多的呦!我说的是薪资:)。
Native Heap:Native代码分配的内存,虚拟机和Android框架分配内存。关于什么是Native代码,即非Java代码分配的内存。详细介绍请找百度。
Dalvik Heap:Java对象分配的占据内存
Dalvik Other:类数据结构和索引占据内存
Stack:栈内存
Ashmem:不以dalvik-开头的内存区域,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。匿名共享内存(Anonymous Shared Memory-Ashmem。Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。
Other dev:内部driver占用的内存
.so mmap C库代码占用的内存
.jar mmap java文件代码占用的内存
.apk mmap apk代码占用的内存
.ttf mmap ttf文件代码占用的内存
.dex mmap dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区
Other mmap 其它文件占用的内存
Pss:进程各部分内存的消耗,是所有进程pss相加得到系统占用内存的总和。
Dalvik heap Pss内存=私有内存Private Dirty+共享内存Share Dirty/共享的进程数Dalvik heap Pss内存=私有内存Private Dirty+共享内存Share Dirty/共享的进程数
Heap Size:Dalvik Heap总共的内存大小
Heap Alloc:所有应用实例分配的内存,包括了应用从zygote共享分享的内存
Native Heap Size约等于Native HeapAlloc + Native Heap Free
app内存分析的工具包括:
Android Studio/Memory Monitor:观察Dalvik内存
Dumpsys meminfo:观察整体内存
Smaps:观察整体内存的详细组成
Eclipse Memory Analyzer:详细分析Dalvik内存
app开发中要关注的一些内存使用:
尽量不要在循环中创建太多的临时变量
尽量把大型的循环拆散,分段或按需执行
引入SDK库和调用新的系统API时,主要不常用功能的消耗,可考虑多进程方案,影响内存放入临时进程执行
调整Dex文件的顺序可以优化空间