Instruments是苹果提供的Xcode套件,可用于分析iOS,MacOS程序的性能数据,进行性能提升。Instruments提供了很多类型的Template,用于特定场景的分析。这里选了3种常用的Template进行使用方法的讲解,对于其他Template的用法则用到时再了解吧,没必要一次把所有的类型都学习一遍。
讲解的Template有:
1.Time Profiler
2.Allocations
3.Leaks
 
Time耗时分析
在时间轴中拖拽两个begin-end线,分享这2根线之间的方法调用。

 
详情面板设置
Call Tree设置
通常筛选常见开启的配置方式:
Separate by Thread:按线程分割
Invert Call Tree:倒置调用栈
Hide System Libraries:隐藏系统库
其他按需开启
Separate by State:按状态分割
Flatten Recursion:平铺递归
Top Fuctions:顶部方法,没看出有啥作用。
单击Profile详情面板中的使用每行符号右侧的箭头,进入到当前方法内的详细调用和时间占用。
Heavlest Stack Trace操作
双击右侧Heavlest Stack Trace下的调用符号,进入到源码中方法调用的位置。
Allocations内存使用分析
 

概念解释

all-heap-allocations:所有堆内存分配
all-anonymous-VM:所有的虚拟内存分配
堆分配和虚拟内存分配是两回事
当应用程序启动时,操作系统为其分配一块虚拟内存块。当应用程序分配内存时,操作系统会从已经预留好的虚拟内存块中分配内存
应用程序不能控制匿名虚拟内存的大小,但可以通过优化堆分配来减少内存使用。
# Persistent: 当前内存中正在存活的对象个数
# Transient: 在内存中使用完成后,已经被销毁的对象个数
# Total: 当前存活的+已经销毁的 总个数
Persistent: 当前内存中正在存活的对象所占用的内存大小
Total Bytes: 当前存活的+已经销毁的 对象所使用的内存总大小
Persistent / Total Bytes: 当前存活的与创建对象总数的比值
 
点击Category 下某个item的右箭头,可以查看当前类的所有被创建对象的时间和大小

Leaks内存泄漏分析
 
红X表示有内存泄漏,点击红X查看内存泄漏。
在Leads详情面板,选择Call Tree可以查看方法调用栈。
Call Tree设置
Separate by Thread:按线程分割
Invert Call Tree:倒置调用栈
Hide System Libraries:隐藏系统库
通过Filter筛选工具筛选当前操作的类名,查看出现内存泄漏的方法,点击右侧箭头,进入到当前调用方法内详细查看
双击右侧Heavlest Stack Trace下的调用符号,进入到源码中方法调用的位置。
参考文章
https://juejin.cn/post/6865102561507672077
http://www.samirchen.com/use-instruments/

Instruments中常用Template的使用的更多相关文章

  1. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  2. Spring中常用的23中设计模式

    1.spring 中常用的设计模式有23中  分类  设计模式  创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...

  3. Django中常用的那些模块路径

    Django中常用的那些模块路径 from django.shortcuts import HttpResponse, render, redirect from django import temp ...

  4. Eclipse中常用的快捷键总结!不收藏后悔!

    Eclipse中常用的快捷键总结!不收藏后悔!Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ ...

  5. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  6. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  7. J2EE项目开发中常用到的公共方法

    在项目IDCM中涉及到多种工单,包括有:服务器|网络设备上下架工单.服务器|网络设备重启工单.服务器光纤网线更换工单.网络设备撤线布线工单.服务器|网络设备替换工单.服务器|网络设备RMA工单.通用原 ...

  8. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  9. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  10. 【Unity3d游戏开发】Unity3D中常用的物理学公式

    马三最近在一直负责Unity中的物理引擎这一块,众所周知,Unity内置了NVIDIA公司PhysX物理引擎.然而,马三一直觉得只会使用引擎而不去了解原理的程序猿不是一位老司机.所以对一些常用的物理学 ...

随机推荐

  1. 单机最快的队列Disruptor解析和使用

    前言 介绍高性能队列Disruptor原理以及使用例子. Disruptor是什么? Disruptor是外汇和加密货币交易所运营商 LMAX group 建立高性能的金融交易所的结果.用于解决生产者 ...

  2. [Linux]常用命令之【nl/sed/awk/wc/xargs/perl】

    nl nl : 在linux系统中用来计算文件中行号. nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补 ...

  3. Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so)

    本文首发于 Ficow Shen's Blog,原文地址: Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so). 内容概览 前言 ...

  4. MordernC++之 auto 和 decltype

    在C++11标准中,auto作为关键字被引入,可以用来自动推导变量类型,auto可以用于定义变量,函数返回值,lambda表达式等,在定义变量时可以使用auto来代替具体类型,编译器根据变量初始化表达 ...

  5. Generative Pre-trained Transformer(GPT)模型技术初探

    一.Transformer模型 2017年,Google在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取 ...

  6. 帝国cms7.5和7.2 搜素模板支持 php和灵动标签以及不起作用

    帝国CMS搜索模板不支持动态标签调用,从7.0到7.2再到刚发布的7.5,帝国官方团队始终没解决这个问题,这很不方便,但是帝国的强大可以让我们忽略这个问题,今天老威就把这个bug的解决方法说一下. 第 ...

  7. Redis 报”OutOfDirectMemoryError“(堆外内存溢出)

    Redis 报错"OutOfDirectMemoryError(堆外内存溢出) "问题如下: 一.报错信息: 使用 Redis 的业务接口 ,产生 OutOfDirectMemor ...

  8. shell脚本编程(一)

    c81ba641-5ed7-4ab9-a7c0-e319e0f3890b 初识shell脚本编程 最近项目需求,需要了解下shell脚本编程,所以自己就必须玩玩了= = 初识shell脚本编程,找了几 ...

  9. Mac 下 brew安装慢的问题

    brew默认源使用的是github,可以设置环境变量达到切换源的效果,见官网: https://github.com/Homebrew/install export HOMEBREW_BREW_GIT ...

  10. HTML5中的document.visibilityState

    在 HTML5 中,文档对象(即 document 对象)具有一个 visibilityState 属性,该属性表示当前文档对象的可见性状态. visibilityState 可能的取值有以下三种: ...