写点什么

LeakCanary 源码学习二:LeakCanary,sw 实战营文件下载

用户头像
Android架构
关注
发布于: 刚刚

1.3 强引用的特点


1.4 注意相互引用情况


2、软引用(SoftReference)


2.1 关于SoftReference软引用


2.2 软引用应用场景


2.3 软引用的简单使用


3、弱引用(WeakReference)


4、虚引用(PhantomReference)


ReferenceQueue


LeakCanary源码分析




LeakCanary 原理


============


  • 1、Activity Destroy 之后将它放在一个 WeakReference

  • 2、这个 WeakReference 关联到一个 ReferenceQueue

  • 3、查看 ReferenceQueue 是否存在 Activity 的引用

  • 4、如果该 Activity 泄露了,Dump 出 heap 信息,然后再去分析泄漏路径。


四种引用类型


======


参考文章:Android 四种引用比较与源码分析


1、强引用(StrongReference)




《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码

1.1 关于强引用引用的场景

  • 直接 new 出来的对象

  • String str = new String(“yc”);

1.2 强引用介绍

  • 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

  • 通过引用,可以对堆中的对象进行操作。在某个函数中,当创建了一个对象,该对象被分配在堆中,通过这个对象的引用才能对这个对象进行操作。

1.3 强引用的特点

  • 强引用可以直接访问目标对象。

  • 强引用所指向的对象在任何时候都不会被系统回收。JVM 宁愿抛出 OOM 异常,也不会回收强引用所指向的对象。

  • 强引用可能导致内存泄露。

1.4 注意相互引用情况

2、软引用(SoftReference)



2.1 关于 SoftReference 软引用

  • SoftReference:软引用–>当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用 get 方法。

  • 可以通过 java.lang.ref.SoftReference 使用软引用。一个持有软引用的对象,不会被 JVM 很快回收,JVM 会根据当前堆的使用情况来判断何时回收。当堆的使用率临近阈值时,才会回收软引用的对象。

2.2 软引用应用场景

  • 例如从网络上获取图片,然后将获取的图片显示的同时,通过软引用缓存起来。当下次再去网络上获取图片时,首先会检查要获取的图片缓存中是否存在,若存在,直接取出来,不需要再去网络上获取。

2.3 软引用的简单使用

用法如下

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
LeakCanary源码学习二:LeakCanary,sw实战营文件下载