ios 性能优化之定位应用程序的内存问题

定位应用程序的内存问题

管理你的应用程序使用的内存是创建一个应用程序的最重要的一个方面。从最小的iOS设备最大的OS X的电脑,内存是一种有限的资源。 本章描述了如何识别常见的内存问题,从内存泄漏到僵尸。

检查内存使用量的活动监视器跟踪模板

活动监视器跟踪模板监控系统整体活动和统计数据,包括CPU、内存、磁盘和网络。 同时监测所有现有流程,可用于附加特定的进程的新仪器,监测父子流程层次结构和退出运行的流程。 它由活动的监测仪器。 稍后您将发现,活动监视器也用于监视网络活动在iOS设备上。

活动监视器工具为您提供了四个图表快速方便,收集到的信息的可视化表示。 这两个图表描述内存使用情况:

  • 真正的内存使用量(柱状图)。 显示了前五个实际内存的用户在一个条形图。
  • 真正的内存使用量(饼图)。 显示了前五个实际内存显示用户使用的内存总量。

图7 - 1 显示了前五个的用户内存系统上。

图7 - 1 活动监视器工具和图表

以下配置选项提供memory-specific信息通过活动监视器。 数据定义和完整的配置选项,请参阅 活动监视器工具在 仪器用户参考

  • 物理内存连接
  • 物理内存活跃
  • 物理内存不活跃
  • 物理内存使用
  • 物理内存免费
  • 总VM大小
  • VM页面以字节为单位
  • VM上字节
  • 虚拟机交换使用

及时的回收您被释放的内存

配置跟踪模板跟踪分配堆内存使用的措施,包括特定的对象分配的类。 它还记录按地区虚拟内存统计信息。 它包含VM分配和跟踪工具。

避免废弃的记忆通过确保堆不继续增长时不断重复相同的操作。 例如,打开一个窗口立即关闭它,或者设置一个偏好立即复位是概念上的操作返回应用程序之前稳定的记忆状态。 多次循环通过这样的操作不应导致堆无限增长。 确保代码没有放弃记忆,重复的用户场景,每次迭代后使用马克一代特性。 后最初几个迭代(缓存可能温暖),这些迭代的持续的记忆应该降至零。 如果持续的记忆仍在积累,选择重点箭头的调用树的记忆。 那里你可以确定负责放弃内存的代码路径。 确保你的场景锻炼你所有的分配内存的代码。

找到内存抛弃了你的应用程序

  1. 打开配置模板。
  2. 选择你的应用从弹出菜单中选择目标。
  3. 点击录制按钮。
  4. 重复执行一个动作在从应用程序,和完成,同样的状态。
  5. 每次迭代后的重复操作,单击马克一代按钮堆的快照。
  6. 重复步骤4和5,直到你看到堆是否无限制增长,然后单击停止按钮。
  7. 分析对象被heapshots定位废弃的记忆。

如果堆持续增长后的头几个迭代周期,你知道你的应用程序是内存泄露。 找到一个heapshot似乎代表重复堆增长。 点击焦点按钮右边的heapshot名称显示在这期间创建的对象范围仍生活在应用程序执行。

停止跟踪后,您仍然可以通过拖动拍照检查头在跟踪窗口时间到你想要的快照,并单击mark一代又一代。 后停止跟踪,以最后一次快照的痕迹。 在这一点上,持久对象的数量应该是零。

注意: 垃圾收集没有废弃的内存释放。

在您的应用程序找到泄漏

泄漏跟踪模板的措施一般内存使用情况,检查内存泄露,并提供统计数据由类以及对象分配内存地址历史所有活动分配和泄露的街区。 它包括分配和泄漏的仪器。

利用泄漏这一工具来发现你的应用程序中的对象不再被引用和可及。 这些块的内存泄漏报告工具。 这些报告泄漏对象和类名。 其他报告为Malloc - 大小 

查找内存泄露

  1. 打开泄漏仪器。
  2. 选择你的应用从弹出菜单中选择目标。
  3. 点击录制按钮。
  4. 锻炼你的应用程序执行代码,点击停止按钮时显示泄漏。
  5. 点击任何泄漏对象中确定细节窗格中。
  6. 在扩展细节窗格中,双击一个指令从你的代码。
  7. 在细节窗格中单击Xcode图标打开Xcode代码。

注意: 如果泄漏并不是一个对象,你可以调用的API假定的所有权 malloc ——内存块你缺少相应的自由()调用。

后打开Xcode的块代码创建泄漏,泄漏的原因可能仍然不清楚。 泄漏工具允许你看到正在创造的循环周期的泄漏和根选项在细节窗格中。 它提供了一个参考周期的图,是造成泄漏。

泄漏的循环图

  1. 选择泄漏仪器。
  2. 在细节窗格中选择周期&根源。
  3. 选择您希望看到图的泄漏。

消除僵尸和僵尸跟踪模板

僵尸跟踪模板措施一般内存使用量而关注overreleased的检测,“僵尸”对象。 它使用配置工具来显示数据对象分配的类以及所有活动分配内存地址的历史。 注意,因为僵尸跟踪模板使用“调试”模式,许多其他值显示的配置工具将不会有意义。

僵尸跟踪模板设置变量 NSZombieEnabled 来 真正的 指导编译器来代替一个类型的对象吗 NSZombie 被释放的对象的引用计数为零。 发信息说僵尸时,应用程序崩溃,录音停止,僵尸给对话框。 点击焦点按钮右边的消息对话框显示检测到僵尸的完整记忆overreleased对象的历史。 注意,这个记忆历史是唯一的一部分分配仪器在使用有意义的僵尸跟踪模板。

发现代码中的僵尸

  1. 打开僵尸模板。
  2. 选择你的应用从弹出菜单中选择目标。
  3. 点击录音按钮和运行你的应用程序。
  4. 当一个僵尸给对话框,点击关注按钮右边的消息文本的对话框。
  5. 打开扩展细节窗格中双击历史表的僵尸事件类型的对象。
  6. 在出现堆栈跟踪中,双击调用者负责显示代码负责。

提示: 僵尸模板会导致内存增长,因为能够提供任何僵尸,信息对象的内存分配是从来没有收回。 iOS应用程序,使用它与iOS模拟器而不是设备本身。 出于同样的原因,不要同时使用僵尸模板与泄漏仪器。

时间: 2024-11-05 02:34:08

ios 性能优化之定位应用程序的内存问题的相关文章

iOS性能优化:Instruments使用实战

iOS性能优化:Instruments使用实战 最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instruments使用技巧 关于Instruments官方有一个很有用的用户使用Guide,当然如果不习惯官方英文可以在这里找到中文本翻译版本PDF参阅.Instruments 确实是一个很强大的工具,用它来收集关于一个或多个系统进程的性能和行为的数据极为方便,并能及时跟踪随着时间产生的数据.还可以广泛收集不同类型的数

iOS性能优化之Leaks动态分析

iOS性能优化之Leaks动态分析 Instruments-Leaks有很多跟踪模块可以动态分析和跟踪内存, CPU 和文件系统(因为是动态分析 所以必须运行才能打开). 具体使用 在XCode Open菜单下,点击Leaks 对App进行动态分析(快捷键CMD + i) 或者直接在工程中选择调试导航 在右侧点击Profile in instruments 检测图: Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程.特别是对于主线程,它要处理和渲染所有的

IOS 性能优化的建议和技巧

IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以在Twitter上关注@marcelofabri_. 性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的事项,你也很容易

【腾讯Bugly干货分享】微信读书iOS性能优化

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578c93ca9644bd524bfcabe8 "8小时内拼工作,8小时外拼成长"这是大家共同的理想.除了每天忙于工作外,我们都希望能更多地区吸收领域内的新知识与新技能,从而走向人生巅峰. Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师.每周都会举行嘉宾分享,话题讨论等活动. 上一期我们邀请了腾讯SNG工程师&qu

iOS性能优化之“优化总体原则”(性能优化很重要,为什么你们都没有用?)

笔者由于在iOS开发过程中做过一些优化的工作,对iOS性能优化有一些粗浅的认识,一直想把自己这些经验,简单总结一下. 作为整个系列的第一篇,我打算针对iOS的优化中的一些总体原则做一些总结.因为我觉得无论列表流畅度优化也好.启动时间优化也好还是说其他方面的优化,都有一些共性的原则,只有掌握了这些总体性的原则,才能够更好的做优化,给我们具体的优化任务指明方向,让我们少绕弯路.后面如果时间允许,我可能会写一些关于列表流畅度.启动时间和内存优化等方面的文章. 作为一个开发者,有一个学习的氛围跟一个交流

iOS性能优化小结

iOS性能优化分析 首先要熟悉几个概念 PNG 和 JPG 的区别是什么? png格式的图片有alpha通道,jpeg则没有.png无损压缩,jpeg允许你选择0-100%的压缩质量.如果需要alpha通道(透明),就只能用png格式. CPU 和 GPU 如果想看看两者的区别,先得了解iOS视图背后的层级结构原理  上图中的最底下一行是硬件层,由GPU和CPU组成. 我们经常说到的硬件加速其实是指OpenGL,Core Animation/UIKit基于GPU之上对计算机图形合成以及绘制的实现

iOS性能优化技巧

iOS性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view优化 1.不透明的View 设置为opaque. 2.根据实际情况重用.延迟加载或预加载View. 3.减少subviews数量,定制复杂cell使用drawRect.尽量使用drawRect而不是layoutSubView. 4.不直接调用drawRect. layoutSubviews方法.万不得已时可以用

《Java程序性能优化》学习笔记 Ⅱ程序优化

这一部分主要介绍代码层的优化.了解如何编写高效而精炼的代码,正确的使用函数方法.1.字符串优化处理Java语言中,String对象可以认为是对char数组的眼神和进一步封装.它主要由3部分组成:char数组.偏移量和String的长度.String对象的三个基本特点:不变性,针对常量池的优化,类的final定义. 不变性:是指String对象一旦生成,不能再对它进行改变,即immutable模式.不变模式的作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和所等待的时间,大幅提高系

iOS 性能优化收集

iOS 性能调试 instrument Instrument Instrument之Core Animation工具 避免图层混合 ①.确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明: ②.如无特殊需要,不要设置低于1的alpha值: ③.确保UIImage没有alpha通道: 避免临时转换 ①.确保图片大小和frame一致,不要在滑动时缩放图片: ②.确保图片颜色格式被GPU支持,避免劳烦CPU转换: 慎用离屏渲染 ①.绝大多数时候离屏渲染