使用Instruments分析内存

作者: 升级打怪啊怪 | 来源:发表于2016-07-07 17:30 被阅读1883次

使用Instruments可以监测分析app内存相关的 Overall Memory Use、 Leaked Memory、 Abandoned Memory、 Zombies等内容。

Paste_Image.png

1、 Allocations
点击XCode的Product菜单Profile启动Instruments,选择allocation,会自动启动allocation工具和模拟器。启动后,Allocations面板显示内存中的对象占用曲线,可以显示目前内存中分配了哪些对象,对象的数量,以及由哪些函数进行创建的。

Allocations可以监测到app中一般和虚拟内存的使用情况。统计到的内存类别有All Heap & Anonymous VM、All Heap Allocations、All Anonymous VM。我们无法控制Anonymous VM部分,所以一般只关注All Heap Allocations。

可以对每个动作的前后进行Generations,对比内存的增加,查看使内存增加的具体的方法和代码所在位置。具体操作是在右侧Generation Analysis里点击Mark Generation,这样会产生一个Generation,切换到其他页面或一段时间产生了另外一个事件时再点Mark Generation来产生一个新的Generation,这样反复,生成多个Generation,查看这几个Generation会看到Growth的大小,如果太大可以点进去查看相应占用较大的线程里右侧Heaviest Stack Trace里查看对应的代码块,然后进行相应的处理。

Paste_Image.png

Detail Pane中统计信息包含的类型:Statistics、Call Trees、Allocations List、Generations。
1>Statistics统计项:


Paste_Image.png

2>Call Trees统计项:


Paste_Image.png

3>Allocations List统计项:


Paste_Image.png

4>Generations统计项:


Paste_Image.png

2、Zombies
使用Zombies工具来查找僵尸对象: Zombies工具的查找原理其实和设置NSZombieEnabled环境变量的调试方法是一样的,启动Zombies后在内部设置了NSZombieEnabled为true。

启用了NSZombieEnabled的话,它会用一个僵尸对象来代替已释放对象。也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

3、Leaks
启动Leaks工具后,它会在程序运行时记录内存分配信息和检查是否发生内存泄露。
定位内存泄漏问题:点击Leak Checks时间条的红色叉,查看某行内存泄漏调用栈,会直接跳到内存泄漏代码位置。

Paste_Image.png

Details Pane包含的统计信息有:Leaks、Cycles &Roots、Call Tree。
1>Leaks统计项:


Paste_Image.png

2>Cycles&Roots统计项:


Paste_Image.png

相关文章

  • 从一个AFNetworking循环引用说起

    本文分析使用代码是AFNetworking 3.2.1 最近使用Instruments中的Leaks分析项目内存泄...

  • 1.内存泄漏检测日志之

    在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,OMG: if (!_man...

  • 使用Instruments分析内存

    使用Instruments可以监测分析app内存相关的 Overall Memory Use、 Leaked Me...

  • iOS内存优化

    内存分析 静态分析 Analyze 动态分析 Instruments 可以查看内存分配情况Allocations ...

  • Instruments使用

    Instruments 使用最多的就是 Time Profiler(分析代码执行时间) 和 Leaks(检查内存泄...

  • iOS内存(Heap堆内存 && Anonym

    在使用Instruments 做内存分析的时候, 我们会看到如下的画面,箭头指向的地方有堆内存heap Alloc...

  • APP性能优化

    1.借助instruments利器分析出问题(程序哪些部分最耗时,可以使用Time Profiler;内存是否泄漏...

  • 2018-06-29 学习iOS性能分析和优化

    本文章参考自iOS性能分析和优化,主要学习如何使用性能分析工具Instruments。 一.基本概念 1.内存空间...

  • Instruments 检测内存泄漏

    目的:检测项目内存泄漏、定位内存泄露代码。 工具:Instruments-->Leaks ⚠️分析内存泄露不能把所...

  • 使用Instruments动态分析内存泄漏

    使用方法:点击Product->Profile,然后选择那个漏水的水管Leaks,进入界面后,点击运行,instr...

网友评论

本文标题:使用Instruments分析内存

本文链接:https://www.haomeiwen.com/subject/zkyljttx.html