分析堆内存

21 阅读1分钟

堆内存不仅仅是内存块,还由多个虚拟内存区域组成,16kb

Allocations 工具会记录一段时间内所有分配和释放事件的历史记录,汇总统计数据和调用树帮助你追溯到代码

Alloctions 实时记录堆和VM事件, Alloctions 工具的Mark Generation可以按时间跨度分解增长

image.png

image.png

VM Tracker可以定期拍摄快照来测量所有虚拟内存

内存峰值会带来内存压力,导致系统作出反应 交换和压缩内存,丢弃只读内存,甚至终止后台,因为它会导致碎片化或内存区域出现漏洞,有2种方式可以查找

找出状态为Created Still Living的分配, 或者汇总形式选择一个大范围

Swift 虽然使用自动计数功能,但自动释放池也是内存暂时增长的常见原因

使用autorelease减少内存峰值

Leaks工具会定期对App的内存拍摄快照

引用主要有四种类型:

  1. Strong - definitely a pointer, explicit ownership
  2. Weak/Unowned - definitely a pointer, explicit non-ownership
  3. Ummanaged - probably a pointer, manually managed
  4. Conservative - might be a pointer, tools must assume it is

内存泄漏

unowner 很像强制解析弱引用

image.png

image.png

image.png