我已经抛弃了大量的内存,并发现内存泄漏肯定存在。如果您查看屏幕截图,您会看到只有一个片段,但有9个相同类型的演示者。应该只有一个。当我检查其中一个演示者实例时,探查器会向我显示对演示者的引用。 这些都是RxAndroid方法的回调方法。我正在取消订阅片段的onDestroyView中的所有内容。仍然没有清理演示者实例(如您所见)。
所以我想知道如何区分有效(循环,内部)引用,它们仍然存在,因为对象仍然没有被垃圾收集,而且有问题的引用(导致对象不被清除)。
有人可以指导我如何找出可能发现内存泄漏的位置吗?
答案 0 :(得分:1)
您应该从Square尝试 Leakcanary 一个开源库来检测内存泄漏。它可以帮助您避免进行大量的手动工作,例如
我有一个关于内存泄漏的博客& Leakcanary,you can find it here
答案 1 :(得分:0)
如果使用内存分析器强制进行垃圾收集,那么您就会知道正在使用的其他意外对象,因此它们可能是真正的泄漏而不仅仅是等待收集。 你需要找到gc root的路径,这将告诉你阻止其他人被垃圾收集的对象。
查看' Garbge Collection Roots'部分在这里获取更多信息。 Android内存分析器将告诉您到达gc根目录的最短跳数,但最好只捕获一个hprof并使用类似Eclipse MAT的内容来查看gc root的路径。 Eclipse MAT甚至可以为您检查泄漏。