美文网首页
【Android】【框架】【性能】【监控】【内存】【LeakCa

【Android】【框架】【性能】【监控】【内存】【LeakCa

作者: 徐乙_ | 来源:发表于2019-08-09 23:29 被阅读0次

架构

image.png

原理:检测

最核心的点在于JVM的一个特性:当检测到某对象可以被GC,并且它有WeakReference,会把此对象放入WeakReference的ReferenceQueue中
这个ReferenceQueue是可以外部传入的,所以新建WeakReference的时候,给所有WeakReference传入的都是公共的一个ReferenceQueue
同时对于每个WeakReference,生成一个UUID,并添加到一个Set中
所以此时 1、ReferenceQueue代表的含义是即将GC的对象 2、Set的含义是还未被回收的对象
每次都会遍历ReferenceQueue,找到对应的对象,到Set中去删除,代表这个对象已被回收
如果发现ReferenceQueue还有元素,那就GC一次,再次去遍历
此时发现还有元素,代表出现了内存泄漏

原理:分析.hprof文件

dump后输出.hprof文件
然后通过HaHa库解析.hprof文件
首先转成SnapShot对象
然后搜索KeyedWeakReference这个类,找到其所有实例化对象,即可找到泄漏对象
最终根据泄漏对象,找到最短路径

内存泄漏检测的重要性

内存泄漏潜移默化地影响项目性能,哪怕再好的一个项目,都有可能出现大量的内存泄漏而不自知
这些泄漏在偷偷地影响项目的指标:Crash率、ANR率、卡顿等等
同时这些泄漏又是非常好治理的,放任影响项目性能又非常可惜
所以打造一套线上内存泄漏监控工具极其重要

后记

学习自
https://www.jianshu.com/p/0b89108c45e5

有什么写得错误、让人费解或遗漏的地方,希望可以不吝赐教,我会马上更改

相关文章

网友评论

      本文标题:【Android】【框架】【性能】【监控】【内存】【LeakCa

      本文链接:https://www.haomeiwen.com/subject/qutljctx.html