iOS app内存分析套路

Xcode下查看app内存使用情况有2中方法:

  1. Navigator导航栏中的Debug navigator中的Memory
  2. Instruments

一.Debug navigator中的Memory

此方法是查看内存最简单直接有效的方法,真机调试时,通过Debug navigator中Memory查看app内存,入口如图

根据这个值查看app内存占用,这个内存是当前app占用的总内存,是堆栈内存、虚拟内存(OpenGL占用的显存算在虚拟内存中里面)的总和。

二.Instruments

启动Instruments的方法是,Product->Profile,经过漫长的编译时间后,出现Instruments界面,下图

Instruments中,可以分析内存的工具有Activity Monitor,Allocations,Leaks。

(1)Leaks

Leaks检测内存泄露的工具,很有用。Leaks运行中,看到下面这个红叉叉就表示有内存泄露了

(2)Allocations

Allocations是检测堆栈内存的,下面的VM tracker检测虚拟内存。Allocations运行起来如下图

Allocations永远比Debug navigator Memory中显示的内存要小,就是因为Allocations中没有统计虚拟内存。iOS把OpenGL占用的显存算作虚拟内存的一部分,下图参考自

When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth

部分malloc出来的内存也算在虚拟内存中,下图参考自A look at how malloc works on the Mac

(3)Activity monitor

Activity monitor看手机整体内存情况的,这里的显示app内存值和Debug navigator中的Memory显示的值是一样的

其他:

1. app最多能占用多少内存不闪退

占用机器内存的一半左右就会闪退,和系统版本、后台程序数有关。

不同渠道对内存有不同的要求,例如如下某渠道

2. iOS app为什么内存没有泄露,内存却降不下来

eg: 创建大概20个哥布林spine动画,此时内存占用46M,然后释放掉,内存占用竟然还是46M,以为是spine有内存泄露,Leaks检测没有发现内存泄露。反复加载释放20个哥布林,内存都没有超过48M,但是为毛内存没有下降,而是维持在46M左右?

因为(1)图片加入了TextureCache,占用了部分内存(2)malloc出来的一部分内存算到了VM(虚拟内存)中,为了下次malloc速度更快,这部分内存虽然调用了free,但iOS系统依然没有将其回收。这就是上面说的部分malloc出来的内存也算在虚拟内存中。
这可以在mac模拟器上测试,malloc一块4M的内存,然后free之,内存不降

3. 怎么进行app内存测试

(1) 用Leaks检测内存泄露
(2) 反复进入退出一个功能页面,在Debug navigator中看内存是不是持续上升。内存持续上升说明内存漏了。

iOS app内存分析套路的更多相关文章

  1. iOS的内存分析和内存管理

    iOS的内存分析和内存管理 [内存管理]一直是iOS开发中的一个重点. 本文就带你从内存分析开始一步步了解内存的占用情况,从真实的情况中领悟真正项目开发过程中的内存的使用情况. 注:本文默认你熟悉 M ...

  2. iOS基础 - 内存分析

    一.内存的重要性 程序是否可用的最根本的制约因素. 十分影响用户体验. 程序的crash有很多情况都是内存的原因. 二.iOS平台内存警告机制 iOS系统不支持虚拟内存,一旦出现内存不足的情况,iOS ...

  3. 【Android端 APP 内存分析】使用工具进行APP的内存分析

    Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...

  4. iOS之内存分析

    静态内存分析(Product->Analyze) 静态内存分析是不运行程序,直接对代码进行分析. 但是没有真正分配内存,根据代码的上下文的语法结构,来分析是否有内存泄露 缺点:不一定准确,但是如 ...

  5. ios app性能分析

    苹果app的流畅性一般比安卓的要好的多.应该是和苹果系统的设计理念同样,早期的iphone4曾经是绝对单任务,仅仅能做一件事情,尽管添加了后台能够.音乐播放,定位等有限的服务.可是大多数普通应用切换到 ...

  6. iOS App内存优化之 解决UIImagePickerController的图片对象占用RAM过高问题

    这个坑会在特定的情况下特别明显: 类似朋友圈的添加多张本地选择\拍照 的图片 并在界面上做一个预览功能 由于没有特别的相机\相册需求,则直接使用系统自带的UIImagePickerController ...

  7. 获取 iOS APP 内存占用的大小

    当我们想去获取 iOS 应用的占用内存时,通常我们能找到的方法是这样的,用 resident_size:   #import <mach/mach.h> - (int64_t)memory ...

  8. ios开发:OC对象的内存分析

    最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开 ...

  9. 梅沙教育APP简单分析-版本:iOS v1.2.21-Nathaneko-佳钦

    梅沙教育APP简单分析 时间:2017年6月6日 版本:iOS v1.2.21 分析人:Nathaneko-佳钦 备注:仅仅是个人一些简单的分析与见解,非正式产品分析报告,未体验购买相关功能,可能存在 ...

随机推荐

  1. 如何用百度MIP快速搭建体验友好的移动页面

    在读这篇文章之前,请确定你已经了解MIP定义及加速原理.如果不确定的话,可以到MIP官网了解. 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成MIP站,也可以单独再做一套MIP站点与 ...

  2. HashSet HashTable 与 TreeSet

    HashSet<T>类 HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. HashSet& ...

  3. 问题记录:EntityFramework 一对一关系映射

    EntityFramework 一对一关系映射有很多种,比如主键作为关联,配置比较简单,示例代码: public class Teacher { public int Id { get; set; } ...

  4. PHP之购物车的代码

    该文章记录了购物车的实现代码,仅供参考 book_sc_fns.php <?php include_once('output_fns.php'); include_once('book_fns. ...

  5. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  6. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  7. [译]处理文本数据(scikit-learn 教程3)

    原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...

  8. Html.DropDownLis绑定数据库

    效果: 方法一: View: <div class="col-md-md-4"> <div class="input-group"> & ...

  9. javascript函数

    array.sort(function(a, b){ return a -b ; } )   把数组 array 按照从小到大排序. [11, 22, 586, 10, -58, 86].sort(f ...

  10. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...