我有一个小的Android应用程序,我尝试寻找内存泄漏,所以我点击了“Dump Java Heap”,列表中的第一个类是FinalizerReference(java.lang.ref)。它有超过 500 个实例,每个实例都有一个“下一个”和“上一个”到另一个 FinalizerReference。
我知道FinalizerReference来自实现Object.finalize()的对象,但我的应用程序中没有实现它的对象。我怎样才能找出为什么会发生这种泄漏并修复它?
有关问题的更多详细信息,请查看 .终结器对象只是扩展的 s,因此您可以调查内容。它将为您提供有关终结对象的信息。FinalizerReference
Finalizer
Reference
根据内容,您将有新的潜在客户。挂起对象的定版过程可能非常长。由于您只有一个线程处理所有线程,因此您可能以某种方式完成更多内容。
干杯
您的应用中可能没有涉及FineritionerReference的内存泄漏,尽管Android Memory Profiler使它看起来像是有。
我对类似问题的调查使我确信,在FinalizerReference的情况下,Profiler对相同的少量内存执行大规模的多次计数,因此保留内存的报告值毫无意义,有时甚至是荒谬的。
在您的例子中,~38kB 的浅层大小很重要,但很小,而 ~40 MB 的保留内存应该被忽略。