在内存分析的时候,我们都会用Android studio自带的Profiler工具,很好用,可以用图形直观的展示。其实这些数据是通过dumpsys命令从手机中取回来的,然后将其绘制出来而已。其实关键还是理解dumpsys能取到的数据是什么含义。
- 私有(干净和脏)RAM
这是仅由您的进程使用的内存。这是您的应用进程销毁后系统可以回收的 RAM 容量。通常情况下,最重要的部分是私有脏 RAM,它的开销最大,因为只有您的进程使用它,而且其内容仅存在于 RAM 中,所以无法通过分页机制映射到硬盘(因为 Android 不使用交换)。您进行的所有 Dalvik 和原生堆分配都将是私有脏 RAM;您与 Zygote 进程共享的 Dalvik 和原生分配则是共享脏 RAM。 - 实际使用的物理内存(比例分配共享库占用的内存,PSS)
这是对应用 RAM 占用情况的衡量,考虑了在进程之间共享 RAM 页的情况。您的进程独占的 RAM 页会直接计入其 PSS 值,而与其他进程共享的 RAM 页则仅会按相应比例计入 PSS 值。例如,两个进程之间共享的 RAM 页会将其一半的大小分别计入这两个进程的 PSS 中。
上面是两个很重要的概念,是实际中,我们关系pss就可以,这个可以理解成app实际使用的内存,而且,Android profiler绘制使用的也是这些数据。
其实,我们拿到这些数据也是可以自己绘制的,比如,我们在用appium在做自动化测试的时候,整个流程中就需要实时绘制出内存的变化。
这部分知识的深入了解,可以看参考中的几篇文章。