使用adb shell dumpsys meminfo分析app内存截图:

对APP进行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 Heap Alloc + Native Heap Free

app内存测试方面的工具:

Android Studio/Memory Monitor:观察Dalvik内存

Dumpsys meminfo:观察整体内存

Smaps:观察整体内存的详细组成

Eclipse Memory Analyzer:详细分析Dalvik内存

app开发减少内存方法:

尽量不要在循环中创建太多的临时变量

尽量把大型的循环拆散,分段或按需执行

引入SDK库和调用新的系统API时,主要不常用功能的消耗,可考虑多进程方案,影响内存放入临时进程执行

调整Dex文件的顺序可以优化空间

欢迎讨论。