android studio内存分析之Memory profiler的使用

news2025/1/19 7:55:18

目录

      • Android Studio中内存分析工具Memory profiler的使用
        • 1. 打开Memory Profiler
        • 2. 工具使用
        • 3. 内存选项说明
        • 4. 内存性能分析器概览
        • 5. 内存计算方式
        • 6. 查看内存分配
        • 7. 捕获java/kotlin方式查看内存分配
        • 8. 堆转储文件导入和导出
      • 内存性能分析器中的泄漏检测

Android Studio中内存分析工具Memory profiler的使用

参考文章

1. 打开Memory Profiler

有两种方式打开,第一种通过标题栏打开:
在这里插入图片描述
第二种通过下方菜单栏打开
在这里插入图片描述

2. 工具使用

打开后是这样的:
在这里插入图片描述
打开后,点击 + 号,选择自己包名
在这里插入图片描述
选择完成后,就会创建你项目的SESSIONS界面:
在这里插入图片描述
如果想删除这个SESSIONS,右键删除:
在这里插入图片描述
点击memory这一列
在这里插入图片描述
点击后到内存捕获类型页面

3. 内存选项说明

  • 捕获堆转储(Capture heap dump):查看应用程序中在特定时间点使用内存的对象
  • 记录Native分配(Record native allocations):查看每个C/C++对象在一段时间内是如何分配的
  • 记录java/kotlin分配(Record java/kotlin allocations):查看在一段时间内如何分配每个java/kotlin对象
    在这里插入图片描述
    然后是这个页面
    在这里插入图片描述
    在这里插入图片描述
    然后看到这个页面
    在这里插入图片描述
    在这里插入图片描述

4. 内存性能分析器概览

原文链接
内存性能分析图
当您首次打开内存性能分析器时,您将看到一条表示应用内存使用量的详细时间轴,并可使用各种工具强制执行垃圾回收、捕获堆转储以及记录内存分配
在这里插入图片描述

  1. 用于强制执行垃圾回收事件的按钮
  2. 用于捕获堆转储的按钮
  3. 用于指定性能分析器多久捕获一次内存分配的下拉菜单
  4. 用于缩放时间轴的按钮
  5. 用于跳转到实时内存数据的按钮
  6. 事件时间轴,显示活动状态、用户输入事件和屏幕旋转事件
  7. 内存使用量时间轴,它会显示以下内容
  • 一个堆叠图表,显示每个内存类别当前使用多少内存,如左侧的 y 轴以及顶部的彩色键所示
  • 一条虚线,表示分配的对象数,如右侧的 y 轴所示
  • 每个垃圾回收事件的图标

5. 内存计算方式

内存性能分析器顶部看到的数字
在这里插入图片描述
内存计数中的类别如下

  • Java:从 Java 或 Kotlin 代码分配的对象的内存
  • Native:从 C 或 C++ 代码分配的对象的内存
  • Graphics:图形缓冲区队列为向屏幕显示像素(包括 GL 表面、GL 纹理等等)所使用的内存
  • Stack:您的应用中的原生堆栈和 Java 堆栈使用的内存。这通常与您的应用运行多少线程有关
  • Code:您的应用用于处理代码和资源(如 dex 字节码、经过优化或编译的 dex 代码、.so 库和字体)的内存
  • Others:您的应用使用的系统不确定如何分类的内存
  • Allocated:您的应用分配的 Java/Kotlin 对象数。此数字没有计入 C 或 C++ 中分配的对象

6. 查看内存分配

选择Capture heap dump,并点击Record按钮,开始捕获,捕获完成后,点击Stop,进行分析
在这里插入图片描述
查看捕获结果
在这里插入图片描述
在这里插入图片描述
检查分配记录步骤:

  1. 点击 Class Name 列标题以按字母顺序排序。然后,点击一个类名称。此时下侧将出现
  2. Instance View 窗格,显示该类的每个实例
  3. 在 Instance View 窗格中,点击一个实例。此时下方将出现 References 标签页,显示该实例被4. 分配到何处以及在哪个线程中。
  4. 在 References 标签页中,右键点击任意行并选择 Jump to Source,以在编辑器中打开该代码

菜单查看说明
在这里插入图片描述
菜单-检查的堆:

  • default heap:当系统未指定堆时
  • image heap:系统启动映像,包含启动期间预加载的类。此处的分配确保绝不会移动或消失
  • zygote heap:写时复制堆,其中的应用进程是从 Android 系统中派生的
  • app heap:您的应用在其中分配内存的主堆
  • JNI heap:显示 Java 原生接口 (JNI) 引用被分配和释放到什么位置的堆

菜单-分配:

  • Arrange by class:根据类名称对所有分配进行分组。这是默认值

  • Arrange by package:根据软件包名称对所有分配进行分组

  • Arrange by callstack:将所有分配分组到其对应的调用堆栈

  • 捕获Native方式查看内存分配
    捕获Native
    在这里插入图片描述
    native结果数据
    在这里插入图片描述
    结果信息说明:

  • Allocations:在选定时间段内通过 malloc() 或 new 运算符分配的对象数

  • Deallocations:在选定时间段内通过 free() 或 delete 运算符解除分配的对象数

  • Allocations Size:在选定时间段内所有分配的总大小(以字节为单位)

  • Deallocations Size:在选定时间段内所有已释放内存的总大小(以字节为单位)

  • Total Count:Allocations 列中的值减去 Deallocations 列中的值所得的结果

  • Remaining Size:Allocations Size 列中的值减去 Deallocations Size 列中的值所得的结果

7. 捕获java/kotlin方式查看内存分配

在这里插入图片描述
Allocation Tracking下拉菜单说明

  • Full:捕获内存中的所有对象分配。这是 Android Studio 3.2 及更低版本中的默认行为
  • Sampled:定期对内存中的对象分配情况进行采样。
  • Off:停止跟踪应用的内存分配

8. 堆转储文件导入和导出

  1. 堆转储文件导出
    在Sessions列表中,点击会话条目右侧的 Export method trace 或 Export system trace 按钮
    在这里插入图片描述
  2. 堆转储文件导入
    Sessions 窗格中点击 Start new profiler session 图标"+",然后选择 Load from file
    在这里插入图片描述

内存性能分析器中的泄漏检测

  1. 检查内存泄漏
    捕获堆转储(Capture heap dump)检测期间操作设备,完成后点击Stop按钮,检测结束后,显示有内存泄漏及内存泄漏的数目
    在这里插入图片描述

  2. 如何查看内存泄漏的位置
    双击内存泄漏的位置,显示内存泄漏的列表
    在这里插入图片描述

  3. 点击列表中其中一个,显示实例对象
    在这里插入图片描述

  4. 点击实例对象,显示详细信息
    在这里插入图片描述

  5. 切换到References选项卡,并点击show nearest GC root only
    在这里插入图片描述

  6. 右键选择jump to source在这里插入图片描述

  7. 跳转到源码,可以看到是thread引起的内存泄漏
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你了解—使用Ubuntu系统,公网环境下SSH远程树莓派

公网环境下Ubuntu系统SSH远程树莓派 文章目录 公网环境下Ubuntu系统SSH远程树莓派前言 1. 安装cpolar客户端2. 安装完成后输入指令3. ubuntu系统输入命令 前言 树莓派作为低功耗、小型化的硬件设备,其功能和运算能力并未过度缩水,在不少场景中&#xff…

UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…

基于spring boot的餐饮管理系统java酒店饭店菜谱 jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于spring boot的餐饮管理系统j 系统1权限&#xff…

Python实现GA遗传算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世…

利用Jmeter做接口测试全流程分析

利用Jmeter做接口测试怎么做呢?过程真的是超级简单。 明白了原理以后,把零碎的知识点填充进去就可以了。这篇文章就来介绍一下如何利用Jmeter做接口测试的流程,主要针对的是功能测试。暂不涉及到自动化测试和性能测试的内容。 一把来说&…

AIGC:【LLM(五)】——Faiss:高效的大规模相似度检索库

文章目录 一.简介1.1 什么是Faiss1.2 Faiss的安装 二.Faiss检索流程2.1 构建向量库2.2 构建索引2.3 top-k检索 三.Faiss构建索引的多种方式3.1 Flat :暴力检索3.2 IVFx Flat :倒排暴力检索3.3 IVFxPQy 倒排乘积量化3.4 LSH 局部敏感哈希3.5 HNSWx 一.简介…

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)em

​ 工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三):张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一):并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装ma…

【FIFO IP系列】FIFO IP参数配置与使用示例

Vivado IP核提供了强大的FIFO生成器,可以通过图形化配置快速生成FIFO IP核。 本文将详细介绍如何在Vivado中配置一个FIFO IP核,以及如何调用这个FIFO IP核。 一、FIFO IP核的配置 1、新建FIFO IP 在Vivado的IP Catalog中找到FIFO Generator IP核,双击…

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一,出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读,一对一的模式变得不再可信赖,千变万化的网络环境中,冗余和备份显得格外重要,稍大型的系统就会存在大量微服务…

一百四十七、Kettle——Linux上安装的kettle8.2连接ClickHouse数据库

一、目标 kettle8.2在Linux安装好后,需要与ClickHouse数据库建立连接 二、前提准备 1、在Linux已经安装好kettle并可以启动kettle 2、kettle版本是8.2 3、已知Linux系统架构是64位 4、准备好ClickHouse的驱动包(借他人网盘链接一用) https://pan.baidu.com/s/…

Pytorch深度学习-----损失函数(L1Loss、MSELoss、CrossEntropyLoss)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Co…

编织人工智能:机器学习发展历史与关键技术全解析

文章目录 1. 引言1.1 机器学习的定义1.2 重要性和应用场景重要性应用场景 2. 机器学习的早期历史2.1 初期理论与算法感知机决策树 2.2 早期突破支持向量机神经网络初探 3. 21世纪初期的发展3.1 集成学习方法随机森林XGBoost 3.2 深度学习的崛起卷积神经网络(CNN&…

ViLT:基于transformer模型的计算机视觉与自然语言处理多模态模型

transformer模型刚开始使用在NLP自然语言处理的机器翻译实例上,但是随着注意力机制的算法越来越火,根据transformer模型的魔改模型也越来越多,首先便是Google自己发布的VIT模型,把transformer注意力机制应用到计算机视觉任务上。那么transformer模型是否也同样适用于多模态…

模拟实现消息队列项目(系列4) -- 服务器模块(内存管理)

目录 前言 1. 创建MemoryDataCenter 2. 封装Exchange 和 Queue方法 3. 封装Binding操作 4. 封装Message操作 4.1 封装消息中心集合messageMap 4.2 封装消息与队列的关系集合queueMessageMap的操作 5. 封装未确认消息集合waitMessage的操作 6. 从硬盘中恢复数据到内存中 7. Memo…

【前端 | CSS布局】 网格布局(grid)

概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。 上图这样的布局&am…

安装linux操作系统

安装虚拟机的步骤: 安装linux系统 之后开启虚拟机 之后重启,打开虚拟机,登录root账号

高薪通报!!230418期班平均薪资9600!!行途不晚,箭响离弦...

回头看,2023的钟表已经转了半轮,时间转眼已经过去一半,这一年我们摘下口罩,重新出发。2023年,失业者高达8700万人,应届毕业生1158万人,我们的就业环境并不乐观。 多少人干着并不如意的工作&…

安装和登录appuploader

转载:安装和登录appuploader 目录 转载:安装和登录appuploader 一. 下载安装appuploader windows启动 部分功能不可用处理 驱动安装 二. 登录appuploader 常规使用登录方法 验证码说明 使用上传专用密码登录 未支付688给apple账号登录 一. 下载…

Java重启

Java启动! 前言祖师爷高斯林老爷子冯诺依曼 注释单行注释多行注释文档注释 标识符***【硬性规则】******【软性建议】*** 关键字结尾 前言 其实我在写这篇文章的时候已经完整地学过一遍Java校招需要掌握的大部分知识了,但是在最近找实习的过程中,我发现自己对于一些只是还是模…