堆内存不仅仅是内存块,还由多个虚拟内存区域组成,16kb
Allocations 工具会记录一段时间内所有分配和释放事件的历史记录,汇总统计数据和调用树帮助你追溯到代码
Alloctions 实时记录堆和VM事件, Alloctions 工具的Mark Generation可以按时间跨度分解增长
VM Tracker可以定期拍摄快照来测量所有虚拟内存
内存峰值会带来内存压力,导致系统作出反应 交换和压缩内存,丢弃只读内存,甚至终止后台,因为它会导致碎片化或内存区域出现漏洞,有2种方式可以查找
找出状态为Created Still Living的分配, 或者汇总形式选择一个大范围
Swift 虽然使用自动计数功能,但自动释放池也是内存暂时增长的常见原因
使用autorelease减少内存峰值
Leaks工具会定期对App的内存拍摄快照
引用主要有四种类型:
- Strong - definitely a pointer, explicit ownership
- Weak/Unowned - definitely a pointer, explicit non-ownership
- Ummanaged - probably a pointer, manually managed
- Conservative - might be a pointer, tools must assume it is
内存泄漏
unowner 很像强制解析弱引用