USS:Unique Set Size 进程独自占用的物理内存(不包含与其他进程共享占用的内存)
PSS:Proportional Set Size 实际使用的物理内存(按比例包含与其他进程共享占用的内存)
RSS:Resident Set Size 实际使用的物理内存(包含与其他进程共享占用的内存)
VSS:Virtual Set Size 虚拟耗用的内存(包含与其他进程共享占用的虚拟内存)
VSS >= RSS >= PSS >= USS
一般情况下,分析PSS会比较有意义。
OOM原因
- Java堆内存溢出
- 无足够的连续内存空间
- FD数量超过限制
- 线程数量超过限制
- 虚拟内存不足
内存分析常用指令
- dumpsys meminfo
- procrank
- cat /pro/meminfo
- free
- showmap
- vmstat
内存分析工具
- MAT
- MEMORY PROFILE
内存泄漏库
- LeakCananry
incoming reference
- 被谁引用,即哪里来
outgoing reference
- 引用了谁
Shallow Heap
- 浅堆:对象本身占有的内存
Retained Heap
- 深堆:是一个统计结果,对象本身 + 引用的对像
- 引用的对象,如果被多个对象引用,则不会统计到深堆
- (查看的时候,深堆意义更大一些)
必要的知识点:
- Java内存
- Java垃圾回收
- Android内存
- Android垃圾回收
- Java四种引用