LeakCanary中的最短路径算法
简介
Leakcanary是square公司开源的内存泄露分析工具,所谓square出品必属精品,LeakCanary提供了一整套的内存泄漏监控 & 分析自动化流程。具体的流程如下
- 泄漏对象检测
- 泄漏达到阈值后dump内存快照
- 分析内存快照,查找泄漏对象
- 查找泄漏对象到GCRoot的最短路径,输出泄漏链路
本文主要分析泄漏对象到GCRoot的最短路径算法
问题抽象
通过解析Hprof文件,可以获得堆上所有对象的引用链,我们可以将这些对象以及之间的引用关系看作一张有向无权图,这样就相当于求解有向无权图的最短路径
有向无权图的最短路径
有向无权图的最短路径可以通过广度优先遍历来实现。
LeakCanary实现
缺陷
最短路径不是唯一的,LeakCanary只能找到其中一条,可能导致只能分析出部分泄漏的原因。