记一次 Android 高内存排查

news/2024/12/26 5:54:20 标签: android, 内存泄露, MAT, 性能优化

本文未使用Android Studio内置Profile分析工具,其一是因为使用时AS明显卡顿一不小心就会无响应,其二部分应用无法连接AS 抓取日志,因此采取最原始但是最万能的方式 adb 抓取 + MAT分析

文章目录

  • 1 查看内存情况 adb shell dumpsys meminfo com.gerry.lifecycle
  • 2 dump hprof 并转成 mat格式
  • 3 分析 hprof

1 查看内存情况 adb shell dumpsys meminfo com.gerry.lifecycle

在这里插入图片描述

TOTAL PSS: App进程总内存,313146 KB = 305M
Java Heap: Java堆内存,hprof文件中的内存主要是来自这里, 250476KB = 244M

2 dump hprof 并转成 mat格式

adb shell am dumpheap com.gerry.lifecycle   /data/local/tmp/demo.hprof

adb pull /data/local/tmp/demo.hprof /Users/liangchaojie/Desktop/mem/demo.hprof

hprof-conv /Users/liangchaojie/Desktop/mem/demo.hprof /Users/liangchaojie/Desktop/mem/demo_mat.hprof

在这里插入图片描述

3 分析 hprof

使用之前提到的 MAT 工具打开 demo_mat.hprof MAT安装教程在这里在这里!
在这里插入图片描述
整个hprof文件221.9M,MainActivity这个对象所引用的对象内存总共205.4M,占比 92.56%,我们点击进入Dominator Tree来分析最大对象是什么
在这里插入图片描述
我们发现MainActivity及其引用的对象内存是215389872 byte = 205.4 MB,占比确实是 92.5%,重点看这个对象引用了哪些对象
在这里插入图片描述
右键点击
在这里插入图片描述
在这里插入图片描述
MainActivity 类内部有一个 list 集合,放了这10000000个对象,检查代码如下
在这里插入图片描述
至此问题就定位到了,原来是创建了很多 Person对象导致的,每个对象多大内存呢?大概16byte


http://www.niftyadmin.cn/n/5799873.html

相关文章

基于C#实现的(WinForm)模拟操作系统文件管理系统

基于C# Framework实现的模拟操作系统文件管理系统(文件管理大作业) 1. 使用说明 1.1 项目简介 文件(File)是操作系统中的一个重要概念。在系统运行时,计算机以进程为基本单位进行资源的调度和分配;而在用户进行的输入、输出中&…

谷歌开发者工具 -来源/源码篇

Chrome DevTools - Sources来源/源码篇 一、官网二、主要用途三、来源篇1.查看文件(1)网页标签,查看所有加载资源(2)网页标签页得组织方式(3)查看文件内容 2.编辑 CSS 和 JavaScript3.创建、保存…

Y3编辑器教程8:资源管理器与存档、防作弊设置

文章目录 一、资源管理器简介1.1 界面介绍1.2 资源商店1.3 AI专区1.3.1 AI文生图1.3.2 AI图生图1.3.3 立绘头像 二、导入导出2.1 文件格式2.2 模型导入2.2.1 模型制作后导出2.2.2 模型文件导入Y3编辑器2.2.3 Y3编辑器角色、装饰物模型要求 2.3 纹理导入2.4 材质贴图2.4.1 材质支…

【Linux网络编程】第十五弹---传输层深度解析:端口号划分、UDP协议特性与TCP协议全面剖析(含连接管理、流量控制、拥塞控制等)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、传输层 1.1、再谈端口号 1.1.1、端口号范围划分 1.1.2、认识知名端口号 1.1.3、两个问题 1.2、UDP …

GPT-O3:简单介绍

GPT-O3:人工智能领域的重大突破 近日,OpenAI发布了其最新的AI模型GPT-O3,这一模型在AGI评估中取得了惊人的成绩,展现出强大的能力和潜力。GPT-O3的出现标志着人工智能领域的重大进步,预计将在2025年实现更大的突破。 …

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关,除了反向代理后端服务外,还可对接口进行预处理。 比如本文提及的一个小功能,根据http header某个字段的值,等于多少的时候,返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

[ffmpeg]编译 libx264

步骤 下载 libx264 git clone https://code.videolan.org/videolan/x264.git cd x264环境搭建 然后在开始菜单中找到并打开 x64 Native Tools Command Prompt for VS 2019 : 打开 msys2_shell.cmd -use-full-path 这时会打开 MSYS 的新窗口,先把一些汇…

【网络安全】John the Ripper 散列密码,PDF密码

John the Ripper 1. John the Ripper 散列密码 假设我们已经获取到一个数据泄露中包含的散列密码文件 hash1.txt,并需要还原原始密码。步骤如下: 识别散列类型 通过 hash-id.py 工具,我们确认 hash1.txt 的散列类型是 SHA-256。 usermach…