Skip to content
阅读进度

如何理解MAT 与 Activity 引用链? ​

返回 性能与稳定性 目录

标准回答 ​

在可控场景重复打开和关闭页面,选择合理的稳定点获取堆转储。先看Histogram确认Activity实例异常,再用Dominator Tree和到GC Root的引用路径找谁在保留它。

常见路径是静态集合、长生命周期单例、尚未执行的Handler消息、监听器或回调持有页面。要判断业务生命周期已经结束且引用本应解除;页面暂存、缓存或转场期间有引用不一定是泄漏。

修改引用的所有权或解绑时机,再用同样循环验证实例和保留内存是否恢复。MAT看到的是Java引用图;若内存来自Native分配或图形资源,要补其他工具。

追问与回答 ​

Retained Size 与 Shallow Size有什么区别 ​

Shallow是对象自身占用;Retained是该对象不可达后,可因其支配关系一起释放的那部分对象规模。不要把所有可达对象大小直接相加,其他根可能还保留它们。

怎么处理软弱引用 ​

根据分析目标排除弱/软引用等路径,再确认真正阻止回收的强引用。看到任意路径并不等同于强泄漏。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。