当前位置: 首页 > news >正文

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。
主要分析命令: vmmap, leaks, malloc_history

一:前言

有 3 种思考方式

  • 你想看到对象的创建吗?
  • 你想要查看内存中引用对象或地址的内容吗?
  • 或者你只是想看看 一个实例有多大?

如果你在进程启动时 启用了 malloc 堆栈日志记录, 那么 malloc_history 可以帮助你查找 该对象的回溯。
如果你只是想看看 在内存中引用对象的内容。 你可以使用 leaks 和在内存页面中 提供的其他工具来帮助你 。
最后 如果你只是想了解 一个区域或一个实例有多大 vmmapheap 是首选工具 作为起始点。
我建议在进程的 Memgraph 上 运行带有 -summary 命令的 vmmap 然后顺着线程继续进行.

二:准备

勾选Malloc Statck Logging ,这样 malloc_history 才有效果。
在这里插入图片描述

xcode 导出 .memgraph
在这里插入图片描述

在这里插入图片描述

三:命令

vmmap

  • vmmap --summary app.memgraph
    dirty sizeswapped size 才是我们需要关注的内容
    dirty size 代表脏内存大小,我们app希望脏内存越小越好,最好都是clean内存
    swapped size iOS 中代表 压缩的内存
    app 使用的总内存一般为 = dirty size + swapped size
    在这里插入图片描述
  • vmmap --page app.memgraph | grep '.dylib'
    对上面的内容只 看 '.dylib' 动态库
    在这里插入图片描述

leaks

  • leaks app.memgraph 命令查看无根内存,代表这不能被释放的无根内存(macOS适用)
  • leaks -traceTree 0x000000014b9b4000 PlanetPics.memgraph

在这里插入图片描述

heap

  • heap App.memgraph 查看堆对象
  • heap App.memgraph -sortBySize 按分配的大小排序,找出内存最大的那个元素,比如NSConcreteData
  • heap App.megraph -addresses all | ‹classes-pattern> 直接查找上一步NSConcreteData的具体数据 heap App.megraph -addresses NSConcreteData

malloc_history

  • malloc_history app.memgraph [address] 找到上一步的有问题的其中一个地址,进行堆栈跟踪
    leaks -traceTree 0x000000014b9b4000 PlanetPics.memgraph
  • malloc_history PlanetPics.memgraph --fullStacks 0x000000014b9b4000
    在这里插入图片描述

四: Xcode 查看内存泄露

双击app.memgraph 打开Xcode后,
点击筛选可以单独查看内存泄露的内存
在这里插入图片描述

链接: https://developer.apple.com/wwdc18/416

相关文章:

  • 基于erp业务的责任链模式实战
  • 设计模式:责任链模式示例
  • 线上研讨会 | 新一代数字化技术赋能机器人及智能产线行业高质量发展
  • 2024 蓝桥打卡Day35
  • 算法训练营第35天|LeetCode 860.柠檬水找零 406.根据身高重建队列 452.用最少数量的箭引爆气球
  • Vue2 —— 学习(一)
  • JAVA POI Excel 使用数组公式 FREQUENCY
  • 2024.4.2力扣每日一题——所有可能的真二叉树
  • Word文档如何设置单选框、复选框、下拉框
  • python selenium向html中写入内容
  • Spring、SpringMVC、Springboot三者的区别和联系
  • 深入理解JVM后端优化技术-逃逸分析(Escape Analysis)
  • 【牛客SQL快速入门】SQL基础(一)
  • 蓝桥杯-网络安全比赛(5)基础学习-JavaScript原型链的prototype、constructor、object.create()、__proto__
  • go语言学习--2.函数
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • golang 发送GET和POST示例
  • IDEA 插件开发入门教程
  • JavaScript异步流程控制的前世今生
  • leetcode-27. Remove Element
  • React+TypeScript入门
  • Vim 折腾记
  • Vue官网教程学习过程中值得记录的一些事情
  • 程序员最讨厌的9句话,你可有补充?
  • 从0到1:PostCSS 插件开发最佳实践
  • 缓存与缓冲
  • 前端临床手札——文件上传
  • 如何学习JavaEE,项目又该如何做?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #DBA杂记1
  • #stm32驱动外设模块总结w5500模块
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $.ajax,axios,fetch三种ajax请求的区别
  • (3)选择元素——(17)练习(Exercises)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java数据结构)ArrayList
  • (安卓)跳转应用市场APP详情页的方式
  • (多级缓存)多级缓存
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)php新闻发布平台 毕业设计 141646
  • (六)激光线扫描-三维重建
  • (篇九)MySQL常用内置函数
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)UDP基本编程步骤
  • (转载)hibernate缓存
  • .gitignore
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET实现之(自动更新)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @RequestBody与@ModelAttribute