了解 LeakCanary 内存泄漏堆栈跟踪
Posted
技术标签:
【中文标题】了解 LeakCanary 内存泄漏堆栈跟踪【英文标题】:Understanding LeakCanary memory leak stack trace 【发布时间】:2019-07-22 14:36:57 【问题描述】:我有一个简单的新闻应用,最近我开始收到一些用户(来自 Firebase Crashlytics)的 OOM 崩溃报告。经过一番研究,我发现原因可能是由于内存泄漏引起的。所以我安装了 LeakCanary,最终在使用 apo 时,我可以看到它报告了潜在的问题。
有经验的可以帮我理解问题所在吗?我已附上日志
【问题讨论】:
【参考方案1】:见https://square.github.io/leakcanary/fundamentals/#how-do-i-fix-a-memory-leak
总结:
泄漏跟踪中的每个节点都是一个 Java 对象,可以是类、对象数组或实例。 往下看,每个节点都有对下一个节点的引用。在 UI 中,该引用为紫色。在 Logcat 表示中,引用位于以向下箭头开头的行。 泄漏跟踪的顶部是垃圾收集 (GC) 根。 GC 根是始终可访问的特殊对象。 泄漏跟踪的底部是泄漏实例。这个实例被传递给 RefWatcher.watch() 以确认它会被垃圾回收,最终它没有被垃圾回收触发 LeakCanary。 从 GC 根到泄漏实例的引用链阻止了对泄漏实例进行垃圾回收。如果你能识别出在那个时间点不应该存在的引用,那么你就可以找出为什么它仍然设置不正确,然后修复内存泄漏。【讨论】:
我已经从 LeakCanary 网站上看到了这篇文章,虽然我不太明白以上是关于了解 LeakCanary 内存泄漏堆栈跟踪的主要内容,如果未能解决你的问题,请参考以下文章
Android性能优化之利用LeakCanary检测内存泄漏及解决办法(转)
Android性能优化之利用LeakCanary检测内存泄漏及解决办法(转)