开发中最重要的事情之一就是管理内存,内存是一个有限的资源。大多数程序员会用 Allocations 工具查看内存分配改变数据结构和算法,实现降低内存。
Examining Memory Usage with the Activity Monitor Trace Template
Activity Monitor 能够监控整个系统活动(activity)和状态(statistics),包括 CPU、memory、disk 和 network。可以单独使用 Activity Monitor,也可以跟其他工具集成。
不论是一个进程还是系统所有进程,Activity Monitor 在虚拟存储大小(virtual memory size)的基础上抓取系统加载信息,并绘制四张图表简洁明快地展示搜集的信息。其中两张图特别地描述了内存使用:1. Real Memory Usage(条形图),显示前五名内存;2. Real Memory Usage(饼图),显示总内存和前五名内存。
下图:系统内前五名内存展示
参数配置以及颜色调配:
Activity Monitor 提供了一系列的参数,涉及内存的有 Physical Memory Wired, Physical Memory Active, Physical Memory Inactive, Physical Memory Used, Physical Memory Free, Total VM Size, VM Page In Bytes, VM Page Out Bytes, VM Swap Used.
Finding Abandoned Memory with the Allocations Trace Template
Abandoned Memory: 先前分配的内存没有用。原因:某些没有完成的功能或者有个 bug 将已经 cache 的图片再加到 cache。
Leaked Memory: 先前分配的内存后来任何地方都用不上。也就是说,没有办法再释放的内存。
从技术上来说 abandoned memory 依旧有效,只是不好用,而 Leaks 工具没法定位,甚至得要一些摸索才能定位问题。Allocations 跟踪工具通过测量 heap memory usage 来定位问题,包括分类定位特定目标,还能分地区记录 virtual memory statistics。这需要 Allocations 和 VM Tracker 两个工具。为了解决 abandoned memory,需要严格使用 Allocations 工具。
当重复一系列组合操作时,用 Allocations 来保证 heap 不会持续增高。例如,关闭和开始一个新的游戏,打开和关闭一个窗口,设置和取消偏好,理论上这些操作应当不会导致 app 不能维持稳定的内存状态或恢复到之前的内存状态。重复操作的过程和分析是过程分析(generational analysis)。一个 “过程(generation)” 代表特定时间的一系列定位。通过多种过程中的重复操作,通过分析结果来确定某种倾向。发现这些倾向中的差异,就可以进一步确定 memory 是被 abandoned 的,以及哪里。最后修复问题。
如何使用: