1. 参考文章
https://www.jianshu.com/p/0df5ad0d2e6a
https://blog.csdn.net/msf568834002/article/details/78881341
2. adb shell dumpsys meminfo 包名
adb shell dumpsys meminfo com.lava.cleanmaster
Applications Memory Usage (in Kilobytes):
Uptime: 21001939 Realtime: 501978173
** MEMINFO in pid 18213 [com.lava.cleanmaster] **
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 4604 4540 0 0 16384 6316 10067
Dalvik Heap 2444 2364 0 0 6538 4908 1630
Dalvik Other 602 600 0 0
Stack 108 108 0 0
Ashmem 9 0 0 0
Other dev 5 0 4 0
.so mmap 1138 160 0 20
.apk mmap 331 0 0 0
.ttf mmap 22 0 0 0
.dex mmap 5628 72 5556 0
.oat mmap 1421 0 0 0
.art mmap 1162 832 0 0
Other mmap 9 4 0 0
EGL mtrack 196 196 0 0
GL mtrack 9017 9017 0 0
Unknown 881 840 36 0
TOTAL 27597 18733 5596 20 22922 11224 11697
App Summary
Pss(KB)
------
Java Heap: 3196
Native Heap: 4540
Code: 5788
Stack: 108
Graphics: 9213
Private Other: 1484
System: 3268
TOTAL: 27597 TOTAL SWAP PSS: 20
Objects
Views: 25 ViewRootImpl: 1
AppContexts: 5 Activities: 1
Assets: 4 AssetManagers: 2
Local Binders: 11 Proxy Binders: 14
Parcel memory: 3 Parcel count: 13
Death Recipients: 0 OpenSSL Sockets: 0
WebViews: 0
SQL
MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
3 meminfo 信息横轴
3.1 Pss Total 实际使用内存
将跨进程共享页也加入进来, 进行按比例计算PSS。这样能够比较准确的表示进程占用的实际物理内存。
3.2 Private Dirty 或 Clean 私有内存
进程销毁时可以回收的内存容量
3.2.1 Private Dirty
通常private Dirty内存是最重要的部分,因为只被自己进程使用。Dirty内存是已经被修改的内存页,因此必须常驻内存(因为没有swap)
3.2.2 Private Clean
Clean内存是已经映射持久文件使用的内存页(例如正在被执行的代码),因此一段时间不使用的话就可以置换出去。
3.3 Heap Alloc
HeapAlloc 是Dalvik堆和本地堆分配使用的大小,它的值比Pss Total和Private Dirty大,因为进程是从Zygote中复制分裂出来的,包含了进程共享的分配部分。
4 meminfo 信息纵轴
4.1 Native Heap native
代码申请的内存, 堆和栈,及静态代码块等。
4.2 Dalvik Heap 虚拟机分配的内存
4.2.1 Pss Total 中的 Dalvik Heap
PSS Total包含所有Zygote分配使用的内存,共享跨进程加权。
4.2.2 PrivateDirty 中的 Dalvik Heap
PrivateDirty 是应用独占内存大小,包含独自分配的部分和应用进程从Zygote复制时被修改的Zygote分配的内存页。
4.3 … mmap
映射本地或虚拟机代码到使用的内存中
.so mmap 1138 160 0 20
.apk mmap 331 0 0 0
.ttf mmap 22 0 0 0
.dex mmap 5628 72 5556 0
.oat mmap 1421 0 0 0
.art mmap 1162 832 0 0
Other mmap 9 4 0 0
4.4 … mtrack
4.4.1 EGL mtrack
获取的是gralloc内存使用情况
4.4.1 GL mtrack
说明需要获取的是驱动程序报告的GL内存使用。它主要是GL纹理大小,GL命令缓冲区,固定的全局驱动程序RAM开销等的总和。
4.5 … Unknown
无法归类的其他项。主要包括大部分的本地分配。
4.5 TOTAL
进程总使用的实际内存。