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

目录

      • 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.rhkb.cn/news/84648.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模仿火星科技 基于cesium+ 贴地测量+可编辑

当您进入Cesium的编辑贴地测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。在屏幕的一角,一个友好的提示窗将…

【ROS】Ubuntu18.04安装Ros

Ubuntu18.04安装Ros 引言1 ROS安装(一键式)2 正常安装2.1 添加ROS软件源2.2 添加公钥2.3 更新2.4 安装ros2.5 初始化 rosdep2.6 设置环境2.7 安装rosinstall,便利的工具2.8 检验 3 rviz将bag数据可视化为点云3.1 打开ROS和rviz软件3.2 配置rviz软件可视化…

【论文阅读】基于深度学习的时序预测——Autoformer

系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文链接:https://arxiv.org/abs/2106.13008 github链接:https://github.com/thuml/Autoformer 解读参考&…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址(点对点、一对一)2. 功能寻址(广播、一对多)3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF(Single Frame)2. 首帧 FC&a…

gradio解决上传文件数最大为1000的限制

当使用上传文件夹功能传输超过1000个文件时,会报出以下错误: 在github上,最新版的gradio仓库已经解决了这一问题: 但是这一更改还没有正式发布,因此无法使用pip更新: 因此只能先手动git clone https://g…

Pytest三种运行方式

Pytest 运行方式共有三种: 1、主函数模式 运行所有 pytest.main() 指定模块 pytest.main([-vs],,./testcase/test_day1.py) 只运行testcase 下的test_day1.py 文件 指定目录 pytest.main([-vs]),./testcase) 只运行testcase 目录下的文件 通过nodeid指定用例…

JavaScript + GO 通过 AES + RSA 进行数据加解密

浏览器端搞些小儿科的加密,就好比在黑暗夜空中,点缀了几颗星星,告诉黑客「这里有宝贵信息,快来翻牌」 浏览器端的加密,都是相对安全的。 它的具体安危,取决于里面存在的信息价值,是否值得破解者…

虹科新品 | 振动监测:提升风能行业效率与安全!

一、 CTC概览 服务于工业振动分析市场ISO 9001认证设计和测试以满足工业环境的实际需求无条件终身保修兼容所有主要数据采集器、分析仪和在线系统美国制造 二、风能行业:为什么要进行监测? 在风能行业,振动监测是一项至关重要的节约成本和安…

学习笔记-JVM监控平台搭建

SpringBoot Actuator 1 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>2 开启配置 # 暴露所有的监控点【含Prometheus】 management.endpoin…

windows下以指定用户访问SMB服务器进行读写

一 概述 最近遇到一个问题&#xff0c;linux 的 smb服务器开启匿名访问&#xff0c;windows访问linux文件夹不需要用户名密码就可以进去使用&#xff0c;但是存在一个问题&#xff0c;ssh连接到linux 后修改的文件&#xff0c;在windows已smb方式下打开某个文件修改 是没有权限…

uniapp文件下载并预览

大概就是这样的咯&#xff0c;文件展示到页面上&#xff0c;点击文件下载并预览该文件&#xff1b; 通过点击事件handleDownLoad(file.path)&#xff0c;file.path为文件的地址&#xff1b; <view class"files"><view class"cont" v-for"(…

docker-compose Install minio

前言 MinIO 是一种高性能、兼容 S3 的对象存储。它专为大规模 AI/ML、数据湖和数据库工作负载而构建。它在本地和任何云(公共或私有云)上运行,从数据中心到边缘。MinIO是GNU AGPL v3下的软件定义和开源。 MinIO是对象存储服务,它基于Apache License 开源协议,兼容Amazon …

无脑——010 复现yolov8 使用rt detr 训练自己的数据集

1.配置环境 1. 首先去官网下载yolov8的zip https://github.com/ultralytics/ultralytics 存放在我的目录下G:\bsh\yolov8 然后使用conda创建新的环境 conda create -n yolov8 python3.8 #然后激活环境 conda activate yolov8然后安装pytorch&#xff0c;注意 &#xff0c;py…

GitOps 与 DevOps:了解关键差异,为企业做出最佳选择

在软件开发领域&#xff0c;GitOps 和 DevOps 是加强协作和实现软件交付流程自动化的重要技术。虽然这两种模式都旨在提高软件开发生命周期的效率&#xff0c;但它们的核心原则和实施方式却各不相同。 本篇文章将帮助您了解 GitOps 和 DevOps 之间的差异、它们的工作流程&am…

linux安装redis带图详细

如何在Linux系统中卸载Redis 一、使用apt-get卸载Redis sudo apt-get purge redis-server如果使用apt-get安装Redis&#xff0c;可以使用apt-get purge命令完全卸载Redis。其中&#xff0c;purge命令会不仅仅删除Redis二进制文件&#xff0c;还会删除配置文件、数据文件和日志…

logstash 采集 docker 日志

1、nginx容器部署 参考&#xff1a;nginx容器部署 将容器内的nginx日志文件映射到宿主机/home/logs/nginx目录下 注意&#xff1a;并且需要需要将日志的输出格式修改为json 2、编辑vim /opt/logstash-7.4.2/config/nginx-log-es.conf 文件&#xff0c;收集docker nginx容器日…

Vue + MapBox快速搭建

一、说明&#xff1a; 1.mapbox-gl自2.0版本开始不再开源&#xff0c;需要用户在官网申请key使用。 2.maplibre GL JS是一个开源库&#xff0c;它起源于 mapbox-gl-js 的开源分支。该库的初始版本&#xff08;1.x&#xff09;旨在替代Mapbox的OSS版本。简单来说maplibre是mapb…

Chatgpt API调用报错:openai.error.RateLimitError

Chatgpt API 调用报错&#xff1a; openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…

Linux系统之使用cmatrix实现数字雨效果

Linux系统之使用cmatrix实现数字雨效果 一、cmatrix介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、环境准备工作3.1 安装开发环境3.2 安装基本软件3.3 安装 ImageMagick等工具 四、安装aalib工具4.1 新建目录4.2 下载aalib安装包4.3 解压软件包4.4 编译安装aalib …

Unity Git项目添加子模块

在 当前仓库根目录下执行命令 git submodule add https://github.com/xxx/child.git 检查仓库状态 git status 更新子库 git submodule update --remote 下拉父仓库Git并保住子库也更新 git pull --recurse-submodules 推荐使用 Githubdesktop工具 这样你可以更清楚的看到自己…