android 内存泄露分析

本文介绍了两种内存回收算法:引用计数法及其局限性,以及Java使用的根搜索算法。此外,还详细说明了如何利用Android Studio中的MAT工具进行内存泄漏分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.内存回收
1.常用的一种算法是引用计数法,如果一个对象的引用为0了,那就可以回收了。但是对于这种方法致命缺陷,当对象之间存在循环引用的时候,A引用B,B引用A,这样A和B的引用就一直不会为0,那就无法回收了。

2、Java采用的算法为根搜索算法,以一系列GC Roots为起点,向下搜索,如果存在引用,则对象依然在用,不能回收;如果不存在引用,则可以回收。

可以作为GC Roots的有如下几种:
a、虚拟机栈(栈帧中的本地变量表)中的引用的对象
b、方法区中的类静态属性引用的对象
c、方法区中的常量引用的对象
d、本地方法栈中JNI的引用的对象
这里写图片描述

二.android studio分析内存泄露方法
内存分析工具MAT(Memory Analysis Tools)
【步骤1】得到hprof文件
在Android Studio的Android Monitor,选择你的进程,然后点击左上角第3个图标, Dump Java Heap
这样在工程目录下的captrue文件夹下就会产生hprof文件,但是这个不是标准的hprof文件,需要经过转换才能被MAT打开分析,转换操作
【步骤2】使用MAT分析内存情况
打开MAT,open File,选择刚才转换好的标准hprof文件打开
点击Leak Suspects,里面会列出问题可疑点,饼图的下方是可以点的具体描述,我们找到自己写的那个类相关的可疑点,点击Details

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值