我有一个小的Android应用程序,我尝试寻找内存泄漏,所以我点击'转储Java堆',列表中的第一个类是FinalizerReference(java.lang.ref)。它有超过500个实例,每个实例都有一个'next'和'prev'到另一个FinalizerReference。
我知道FinalizerReference来自实现Object.finalize()的对象,但我的应用程序中没有实现它的对象。我怎样才能找出泄漏发生的原因并解决它?
答案 0 :(得分:5)
有关您的问题的详细信息,请查看Finalizer
的指示字段。
Finalizer对象只是扩展Reference
,因此您可以调查内容。它将为您提供有关最终化对象的信息。
根据内容,您将获得新的潜在客户。待处理对象的完成过程可能很长。由于你只有一个线程处理所有这些,你可能会以某种方式最终确定。
干杯
答案 1 :(得分:0)
尽管Android Memory Profiler使它看起来像应用程序,但您的应用程序中可能没有涉及FinalizerReference的内存泄漏。
我对investigation的类似担忧使我确信,在FinalizerReference的情况下,Profiler会对相同少量的内存执行大量计数,因此,“保留内存”的报告值毫无意义,有时甚至是{{3 }}。
在您的情况下,〜38kB浅大小很重要,但很小,而应忽略〜40 MB的保留内存。