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. 【社工】NodeJS 应用仓库钓鱼

    前言 城堡总是从内部攻破的.再强大的系统,也得通过人来控制.如果将入侵直接从人这个环节发起,那么再坚固的防线,也都成为摆设. 下面分享一个例子,利用应用仓库,渗透到开发人员的系统中. 应用仓库 应用仓 ...

  2. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  3. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  4. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  5. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

  6. Android 自定义 attr

    好纠结,弄了一个下午老是报错如是总结一下安卓自定视图和自定义属性. (一)自定义属性 在Values文件下建立一个attrs.xml文件,attr的format可以参考:http://www.cnbl ...

  7. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  8. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

  9. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  10. [转载]MVVM模式原理分析及实践

    没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Wi ...