Bootstrap

2024年Java最新leakcanary 内存优化框架源码解析,好友给我分享了一份面试官最爱问的Java面试题

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

解决:采用getApplicationContext

2.非静态内部类会默认持有外部类的引用

解决:使用静态内部类

3.Handle造成的内存泄露

解决:使用静态内部类+activity弱引用

4.new 一个线程造成的

使用静态内部类

5.webview造成的

通过killprocess杀掉进程解决

总结一下:大部分都是非静态内部类造成的

Java的4种对象引用:

强引用 StrongReference (宁愿抛出oom错误,让程序终止,GC(垃圾回收器)也不会回收)

软引用 SoftReference (内存足够,GC不会回收,内存不够的时候才回收)

弱引用 WeakRefrence (当垃圾回收器回收的时候,不区分内存够不够,都会回收)

虚引用 :没有任何引用,随时可以回收

1、leakcanary的原理

2、Activity的泄露监测机制

leakcanary的原理(利用弱引用来监控activity):

1、Activity Destroy之后将它放在一个WeakReference弱引用中

2、这个WeakReference关联到一个ReferenceQueue(引用队列)

3、查看ReferenceQueue队列是否存在activity的引用

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

软引用和弱引用对象被GC回收了,Java虚拟机会把这个引用加入到与之关联的引用队列(ReferenceQueue)中。

源码流程:

1、创建RefWatcher,调用ActivityRefWatcher.install,启动一个ActivityRefWatcher,ActivityRefWatcher就是为了监视Activity的回收情况

2、通过ActivityLifecycleCallbacks对象把activity的onDestroy生命周期和ActivityRefWatcher类相关联。

3、最后在线程池中分析内存泄露

leakcanary如何在线程池中分析内存泄露?

在线程池中HeapAnalyzerService extends IntentService ,其实是一个Service的onHandleIntent中处理的,在这个Service中调用了一个checkForLeak方法,

checkForLeak是整个leakcanary中最重要的一个方法:

1、把.hprof转为Snapshot(内存快照)

2、优化gcroots

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

百度、字节、美团等大厂常见面试题

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

目源码】](https://bbs.csdn.net/topics/618154847)收录**

需要这份系统化的资料的朋友,可以点击这里获取

;