查看内存方法:
使用dumpsys meminfo方法查看
在adb shell条件下面使用如下指令查看内存使用情况
dumpsys meminfo com.incall.autofly.launcher
将会得到如下显示列表
Pss Private Private SwapPss Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 49834 49760 0 0 67584 57128 10455
Dalvik Heap 2617 2560 0 0 6605 3303 3302
Dalvik Other 1308 1308 0 0
Stack 88 88 0 0
Ashmem 2 0 0 0
Other dev 56 0 56 0
.so mmap 8045 396 1320 0
.apk mmap 531 0 40 0
.ttf mmap 159 0 96 0
.dex mmap 8756 4 7552 0
.oat mmap 1856 0 0 0
.art mmap 1737 1192 4 0
Other mmap 2215 4 944 0
EGL mtrack 6774 6774 0 0
GL mtrack 35304 35304 0 0
Unknown 8541 8520 0 0
TOTAL 127823 105910 10012 0 74189 60431 13757
我们这里做内存优化,主要关注Native Heap Dalvik Heap .so mmap
- Native/Dalvik 的 Heap 信息 分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏
- so mmap 这里是应用的so文件占用的内存
在做内存优化时候,我们主要关注的是整个apk占用的内存大小,可以使用如下方法过滤
dumpsys meminfo com.incall.autofly.launcher | grep TOTAL:
这个值就是你的应用真正占据的内存大小,获得的占用内存大小如下:
TOTAL: 127823
使用adb shell procrank
PID Vss Rss Pss Uss cmdline
797 4786328K 269524K 113355K 96140K system_server
3735 5307036K 215232K 88778K 77920K com.incall.autofly.launcher
- VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
- USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
- VSS : Virtual Set Size 虚拟耗用内存(包含共享库占用的内存),即单个进程全部可访问的地址空间,这个大小包括了进程已经申请但尚未使用的内存空间。对于确定单个进程实际内存使用大小,VSS用处不大
- RSS : Resident Set Size 实际使用物理内存(包含共享库占用的内存),即单个进程实际占用的内存大小,RSS不太准确的地方在于它包括该进程所使用共享库全部内存大小。对于一个共享库,可能被多个进程使用,实际该共享库只会被装入内存一次。
- PSS : Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)PSS相对于RSS计算共享库内存大小是按比例的。N个进程共享,该库对PSS大小的贡献只有1/N。
- USS : Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)即单个进程私有的内存大小,即该进程独占的内存部分。USS揭示了运行一个特定进程在的真实内存增量大小。如果进程终止,USS就是实际被返还给系统的内存大小
所以,一般情况下有:VSS >= RSS >= PSS >= USS。
参考:https://blog.csdn.net/qq_31588719/article/details/89476050