LeakCanary原理分析

github地址:https://github.com/square/leakcanary
简介及使用教程:https://square.github.io/leakcanary/

使用

在app中的build.gradle中添加:

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
  releaseImplementation   'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
  // 可选,如果你使用了support支持库中的fragment,则需要添加这个依赖
  debugImplementation   'com.squareup.leakcanary:leakcanary-support-fragment:1.6.2'
}

然后在Application中配置:

public class MyApplication extends Application {

	@Override
    public void onCreate() {
		 if(LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
        LeakCanary.install(this);
	}

}

内存泄漏检测原理

怎么判断一个对象已死呢?可达性分析算法,即从GC Roots出发,如果无法寻到一条路径指向该对象,则对象已死,可以被回收。

假设是我们自己来设计 LeakCanary ,我们会怎么设计呢?显然是不可能去监听所有对象的,这样不现实,肯定是去找特定对象来监控,在Android中,常见的内存泄漏都会导致Activity无法被回收,Activity就是最特定的对象,所以,可以监听Activity ,此外还有Fragment。

LeakCanary 正是这样设计的,它目前可以监听 Activity 和 Fragment。

Java与C/C++的区别:
C/C++由程序员写new和delete相关代码来手动分配和释放内存,而Java有内存自动管理机制,由JVM的GC来自动进行垃圾回收,当本该回收的对象由于被其他对象持有引用而无法被GC回收时就会产生内存泄漏。

源码分析

参考:
Android开发教程】面试必问:LeakCanary如何解决内存泄露以及原理解析

看完这篇 LeakCanary 原理分析,又可以虐面试官了
LeakCanary原理解析
LeakCanary 原理分析
LeakCanary原理分析

内存泄漏检测之LeakCanary源码导读与解析

每日一问:说说你对 LeakCanary 的了解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值