memory泄露分析方法(java篇)

#memory泄露主要分为java和native 2种,本文主要介绍java#

测试每天从monkey中筛选出内存超标的app,提单流转到我

首先,辨别内存泄露类型(java,还是native)

  • 从采到的dumpsys_meminfo_pid看java heap,native heap大小分布,可判断出是java/native泄露

  • 如果是java泄露,会抓到hprof文件(am dumpheap pid/pname data/local/tmp/test.hprof)

其次,分析Hprof

  • 明显的activity/fragment leak:销毁的activity/fragment对象的引用     
  • 注意:有多个引用时要看全,每个引用链都可能导致泄露(这里是个大坑,掉下去很多次)(大概率是一个rootcause)
  • 不明显的leak:
  1. 按ShallowSize从大到小顺序,筛选出Allocation数量/NativeSize最大的对象,通常是Bitmap,Service,ViewHolder,View,Dialog,Hashmap,Stub
  2. 一些特殊的对象本身就是GCRoot:Stub
  3. ServiceConnection,ViewHolder,Dialog都是要重点检查的对象
  4. 若Hprof的Native内存占用大,主要是Bitmap对象native内存占用大,再从Bitmap引用链可以反向推导出持有它的对象
  5. 若无法辨别出区别,可借助Mat,LeakSuspects分析出内存分布,找到疑似的泄露对象
  6. 2份hprof文件,在mat上可对出对象的增长,若怀疑某个对象泄露了,再回到profiler中搜到对象和refrence

Mat加载hprof要转换一下才生效,转化的方法是

将.hprof文件拷贝到PC上的/ANDROID_SDK/tools目录下,并输入命令hprof-conv xxx.hprof yyy.hprof,其中xxx.hprof为原始文件,yyy.hprof为转换过后的文件)

据我的经验,有现场或找到复现路径基本100%可找到泄漏源,解决掉

最后,接下来分析下项目中常见的泄露Case:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

案例:新闻数据加载

文章目录 介绍相关概念相关权限约束与限制完整示例 代码结构解读构建主界面数据请求下拉刷新总结 介绍 本篇Codelab是基于ArkTS的声明式开发范式实现的样例,主要介绍了数据请求和touch事件的使用。包含以下功能: 数据请求。列表下拉刷新。列表上拉加载…

Redis高并发高可用(主从复制、哨兵)

复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。 默认…

C++11 异常

C异常概念 在C中,异常是程序在执行过程中遇到意外情况或错误时抛出的一种机制。当程序运行过程中发生异常,可以通过抛出异常、捕获异常和处理异常来改变程序的正常执行流程。 抛出异常:在程序中,可以使用关键字 throw 来抛出异常…

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3)

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin(3) 在 Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图像圆图,Kotlin&#…

【小白专用】C# 连接 MySQL 数据库

C# – Mysql 数据库连接 1. 配置环境 #前提:电脑已安装Mysql服务; Visual Studio 安装Mysql依赖库: 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索, 安装Mysql.Data (Oracle); (安装成功后&…

libcurl开源库的编译与使用全攻略

libcurl简介 libcurl 是一个广泛使用的、支持多种协议的、开源的客户端URL传输库,提供了许多用于数据传输的API,例如文件传输、FTP、HTTP、HTTPS、SMTP等。libcurl 的主要特点包括 支持多种协议:libcurl 支持多种协议,如 HTTP、F…

【昕宝爸爸小模块】线程的几种状态,状态之间怎样流转

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

什么是信噪比

大家好,今天给大家介绍什么是信噪比,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 “信噪比”是电子技术中经常用到的一个词组,知道它的确切含义有一定意…

Day02

今日任务: 977 有序数组的平方209 长度最小的子数组59 螺旋矩阵Ⅱ 977 有序数组的平方 题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 双指针问题,以及数组本身时有序的; 思路: 左、右两个…

unet脑肿瘤分割完整代码

U-net脑肿瘤分割完整代码 代码目录数据集网络训练测试 代码目录 数据集 https://www.kaggle.com/datasets/mateuszbuda/lgg-mri-segmentation dataset.py 在这里插入代码片import os import numpy as np import glob from PIL import Image import cv2 import torchvision fr…

如何在“Microsoft Visual Studio”中使用OpenCV构建应用程序

我在这里描述的所有内容都将应用于 OpenCV 的界面。我首先假设您已经阅读并成功完成了 Windows 中的安装教程。因此,在进一步操作之前,请确保您有一个包含 OpenCV 头文件和二进制文件的 OpenCV 目录,并且您已按照此处所述设置环境变量 设置 O…

多智能体强化学习(概念知识,不涉及具体算法)

目录 一、前置知识1.factored value function2.partially observable MDP (POMDP) problem.2.2 Decentralized-POMDP problem2.3 networked decentralized partially observable Markov decision processes (ND-POMDP) problem2.4 上述两种算法的区别 3. Mean Field Multi-Agen…

深信服超融合HCI版本升级,6.0.0R5升级至6.8.0R2

超融合升级,需要满足以下条件及前期准备: 确认HCI的升级序列号有效升级时长大概在一个半小时,安全起见,需预留至少三至四小时窗口期升级前,需要将所有虚拟机关机,涉及到业务无法访问,需提前通知…

redis中的string相关的部分命令

redis命令手册 redis中文官网查看文档 挨个进行输出调试 Redis Setnx 命令 Redis Getrange 命令 Redis Mset 命令 redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World" OK redis 127.0.0.1:6379> GET key1 "Hello" redis 127.0.0.1:…

datavrap-各种各样的条形图(含详细操作步骤)

静态条形图:正确设置数据即可,导出的图形不会随着时间变化 最普通的静态条形图 黑色系风格的静态条形图 动态条形图:导出的图形会随着时间变化 普通的动态条形图 带数字滚动效果的动态条形图 简单的Top排行榜动态条形图 格式更丰富的Top排行榜…

牛客周赛 Round 28 解题报告 | 珂学家 | 组合数学 + 离散化树状数组

前言 整体评价 还是E稍微有点意思&#xff0c;新周赛好像比预期要简单一些, _. 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红的新周赛 思路: 模拟 #include <bits/stdc.h>using namespace std;int main() {int res 0;for (int i 0; i < 6; i…

【算法练习】leetcode算法题合集之数组和哈希表篇

重建数组&#xff08;高频&#xff09; LeetCode283.移动零 LeetCode283.移动零 双指针&#xff0c;记录已经处理好的序列的尾部 class Solution {public void moveZeroes(int[] nums) {int k 0;for (int i 0; i < nums.length; i) {if (nums[i] ! 0) {swap(nums, i, k)…

【前后端的那些事】开源!前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c;如果为每个功能都单独搭建一个项目&#xff0…

Python之Matplotlib绘图调节清晰度

Python之Matplotlib绘图调节清晰度 文章目录 Python之Matplotlib绘图调节清晰度引言解决方案dpi是什么&#xff1f;效果展示总结 引言 使用python中的matplotlib.pyplot绘图的时候&#xff0c;如果将图片显示出来&#xff0c;或者另存为图片&#xff0c;常常会出现清晰度不够的…

前端js写数据结构与算法

1、什么是数据结构与算法 数据结构&#xff1a;是指数据对象中数据元素之间的相互关系。包括集合结构、线性结构、树形结构、图形结构。 算法&#xff1a;解决问题的思路。 2、时间复杂度 1.是什么? 执行当前算法所“花费的时间” 2.干什么? 在写代码的过程中&#xf…