性能优化中使用Profiler进行内存泄露的排查及解决方式

文章目录

  • 一、前言
  • 二、内存泄露的排查方式
  • 三、参考链接

一、前言

对于常规意义上的线程使用要及时关闭,数据库用完要及时关闭,数据用完要及时清空等等这里不再赘述,但是在开发中总会有不熟悉的api,开发进度过快,开发人员粗心等等原因导致内存泄露。可以使用leakcanary(参考链接:https://square.github.io/leakcanary/)内存检测处理,或者使用lint(参考链接:https://developer.android.google.cn/studio/write/lint?hl=zh-cn)静态代码检测后=,或者开启严格模式StrictMode(参考链接:https://developer.android.google.cn/reference/android/os/StrictMode),或者使用Profiler(参考链接:https://developer.android.com/studio/profile/android-profiler?hl=zh-cn)等等不同的方式进行内存泄露的检查。本文记录Profiler进行内存泄露检查的使用方式。

需要注意的是本篇文章采用了Android Studio新版的UI进行操作,具体开启方式为Preferences->Appearance & Behavior ->New UI 。然后勾选Enable new UI并重启Android Studio。开发工具版本为

Android Studio Giraffe | 2022.3.1 Patch 4
Build #AI-223.8836.35.2231.11090377, built on November 14, 2023
Runtime version: 17.0.6+0-17.0.6b829.9-10027231 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

目前为最新版本开发工具。
测试工具为红米K60,版本为Android13
如需打开 Profiler 窗口,请依次选择 View > Tool Windows > Profiler,或点击工具栏中的 Profile 图标 在这里插入图片描述

二、内存泄露的排查方式

当通过正常启动应用或者通过如下方式启动应用后
在这里插入图片描述
会看到如下页面在这里插入图片描述
然后选择Memory选项卡进行双击打开,会看到如下页面
在这里插入图片描述
选择Capture heap dump。然后点击Record进行录制需要的功能。这个功能录制完会自动停止,然后停止后的页面如下(这个会自动停止好像跟之前的不太一样,不知道是不是升级后的改动)
在这里插入图片描述
可以看到最上层有Leaks的标志,表示内存泄漏数量。点击该位置后可以查看内存泄漏的位置
在这里插入图片描述
选择第一个内存泄漏的类双击后,然后保持和如图一直都页面,可以看到内存泄漏路径
在这里插入图片描述
有的信息比较浅显就能看出问题,有的则不能,比如如图所示的内存泄漏问题,第一个类的的最终泄漏源是在GoogleBannerAdFragment类里面的广告使用上面,这里不再进行解释,每个项目的分析方式不一样,这里不再赘述。

三、参考链接

  1. 应用性能指南
  2. StrictMode
  3. Android Profiler

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

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

相关文章

网络通信基础概念介绍

网络通信基础概念介绍 局域网LAN 局域网,即 Local Area Network,简称LAN。 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。 局域网是指在一个相对较小的…

【【linux C 编程记述 之 VIM的用法讲述】】

linux C 编程记述 之 VIM的用法讲述 我们所说的编写代码包括两部分:代码编写和编译,在Windows下可以使用Visual Studio来完成这两部,可以在 Visual Studio 下编写代码然后直接点击编译就可以了。但是在 Linux 下这两部分是分开的&#xff0c…

Linux:Ubuntu虚拟机安装详解:VMware下的逐步指南

目录 1. centOS系统 2. ubuntu系统 1. 下载Ubuntu映像 step1 step2 step3 2. 新建虚拟机 step1 step2 Step3 step4 step5 step6 内存 内核 映像 显示 网络 3. 网络配置 NAT模式 本机IP获取 ​编辑 bridge模式 4. 开启虚拟机 5. 虚拟机常用配置 语言 …

Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip

Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip 文章目录 Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip一、more1.1 输出重定向>和>>1.2 输入重定向< 二、 再谈一切皆文件三、less指令【重要】四、head指令五、tail指令…

Banana Pi BPI-R3 Mini 开源路由器,也能拍出艺术美感

香蕉派BPI-R3 Mini路由器板开发板采用联发科MT7986A(Filogic 830)四核ARM A53芯片设计&#xff0c;板载2G DDR 内存&#xff0c;8G eMMC和128MB SPI NAND存储&#xff0c;是一款非常高性能的开源路由器开发板&#xff0c;支持Wi-Fi6 2.4G/5G&#xff08;MT7976C&#xff09;&am…

ACL权限

ACL权限 目录&#xff1a; 1. 什么是ACL 2. 操作步骤 1. 什么是ACL ACL是Access Control List的缩写&#xff0c;即访问控制列表 每个项目成员在有一个自己的项目目录&#xff0c;对自己的目录有完全权限 项目组中的成员对项目目录也有完全权限 其他人对项目目录没有…

Ubuntu 安装 JMeter:轻松上手

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要下载 Java&#xff0c;请遵…

JSP:JDBC

JDBC&#xff08;Java Data Base Connectivity的缩写&#xff09;是Java程序操作数据库的API&#xff0c;也是Java程序与数据库相交互的一门技术。 JDBC是Java操作数据库的规范&#xff0c;由一组用Java语言编写的类和接口组成&#xff0c;它对数据库的操作提供基本方法&#…

leetCode 226.翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; 示例 1: 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root…

AR眼镜双目光波导/主板硬件方案

AR(增强现实)技术的发展离不开光学元件&#xff0c;而在其中&#xff0c;光波导和Micro OLED被视为AR眼镜光学方案的黄金搭档。光学元件在AR行业中扮演着核心角色&#xff0c;其成本高昂且直接影响用户体验的亮度、清晰度和大小等因素。AR眼镜的硬件成本中&#xff0c;光机部分…

11.与JavaScript深入交流-[js一篇通]

文章目录 1.变量的使用1.1基本用法1.2理解 动态类型 2.基本数据类型2.1number 数字类型2.1.1数字进制表示2.1.2特殊的数字值 2.2string 字符串类型2.2.1基本规则2.2.2转义字符2.2.3求长度2.2.4字符串拼接 2.3boolean 布尔类型2.4undefined 未定义数据类型2.5null 空值类型 3.运…

讲述 什么是鸿蒙 为什么需要鸿蒙 为什么要学习鸿蒙

首先 我们为什么要学习鸿蒙开发&#xff1f; 因为 鸿蒙发展前景巨大 鸿蒙自发布依赖 一直受社会各界关注 强两百的 App厂商 大部分接受了与鸿蒙的合作 硬件也有非常多与鸿蒙合作的厂商 鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求 所以鸿蒙的崛起不过是早晚的问题 …

软件设计师:计算机组成与体系结构之计算机基础知识

计算机基础知识 数据的表示 码制及进制转换 原码&#xff1a;将数值转成二进制反码&#xff1a;正数与原码完全相同&#xff1b;负数&#xff0c;除了符号位其他位取反补码&#xff1a;正数与原码完全相同&#xff1b;负数&#xff0c;在补码的基础上加1移码&#xff1a;补码…

TCP/IP、Http、Socket之间的区别

目录 前言 一、TCP/IP协议 二、HTTP协议 三、Socket通信机制 四、TCP/IP、HTTP和Socket之间的区别 总结 前言 TCP/IP、HTTP和Socket是计算机网络中的三个重要概念&#xff0c;它们之间有着密切的联系和区别。 一、TCP/IP协议 TCP/IP是指传输控制协议/因特网协议&#x…

Pygame游戏实战五:拼图游戏

介绍模块 本游戏使用的是由Pycharm中的pygame模块来实现的&#xff0c;也可以在python中运行。通过Pygame制作一个拼图游戏&#xff0c;将一个完整的图片进行随机切分&#xff0c;在将其进行还原成完整的图像&#xff0c;看看这个是你小时候玩的游戏吗&#xff1f; 最小开发框…

【开源项目】C#.NET 扩展库 -- Com.Gitusme.Net.Extensiones.Core

目录 1、项目介绍 2、集成方式 方法一&#xff1a;项目中通过Nuget包管理器安装导入 方法二&#xff1a;手动从Nuget官网下载&#xff0c;下载地址&#xff1a; 3、代码中导入命名空间 4、版本变更说明 1.0.7 版本 1.0.6 版本 1.0.5 版本 1.0.4 版本 5、演示示例 示…

45岁后,3部位“越干净”,往往身体越健康,占一个也要恭喜!

众所周知&#xff0c;人的生命有长有短&#xff0c;而我们的身体健康状态&#xff0c;也同样会受到年龄的影响&#xff0c;就身体的年龄层次而言&#xff0c;往往需要我们用身体内部的干净程度来维持&#xff0c;换句话说就是&#xff1a;若是你的身体内部越干净&#xff0c;那…

深度学习图像风格迁移 计算机竞赛

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

【问题思考总结】多维随机变量函数的分布的两种情况的计算方法【离连/连连】

问题 今天做李六第一套的时候发现&#xff0c;有的时候&#xff0c;面对这种第二问的题&#xff0c;很自然地就想到了Fz&#xff08;z&#xff09;&#xff0c;然后进行化简&#xff0c;但是有的时候&#xff0c;像这道题&#xff0c;就突然发现P{XY<z}是一个非常复杂的形式…