Memory
我们可以联想:内存使用情况是否也可以通过类似CPU的方式获取到呢?答案是肯定的。
相关系统原理
内存是有限且系统共享的资源,一个程序占用越多,系统和其他程序所能用的就越少。程序启动前都需要先加载到内存中,并且在程序运行过程中的数据操作也会占用一定的内存资源。减少内存占用也能同时减少其对 CPU 时间维度上的消耗,从而使不仅使 App 以及整个系统也都能表现的更好。
MacOS 和 iOS 都采用了虚拟内存技术来突破物理内存的大小限制,每个进程都有一段由多个大小相同的页(Page)所构成的逻辑地址空间。处理器和内存管理单元(MMU,Memory Management Unit)维护着由逻辑地址到物理地址的 页面映射表(简称 页表),当程序访问逻辑内存地址时,由 MMU 根据页表将逻辑地址转换为真实的物理地址。在早期的苹果设备中,每个页的大小为 4KB;基于 A7 和 A8 处理器的系统为 64 位程序提供了 16KB 的虚拟内存分页和 4KB 的物理内存分页;在 A9 之后,虚拟内存和物理内存的分页大小都达到了 16KB。
虚拟内存分页(Virtual Page,VP)有两种类型:
- Clean:指能够被系统清理出内存且在需要时能重新加载的数据,包括:
- 内存映射文件
- Frameworks 中的 __DATA_CONST 部分
- 应用的二进制可执行文件
- Dirty:指不能被系统回收的内存占用,包括:
- 所有堆上的对象
- 图片解码缓冲数据
- Framework 中的 DATA 和 DATA_DIRTY 部分