我想知道为什么FinalizerReference在我的应用程序中占用如此多的内存

时间:2018-09-02 07:50:11

标签: java android memory-management heap-memory

heap data

我的应用程序无法在android 4.x友好版本上运行,所以我只是在分析应用程序的堆数据,我发现java.lang.FinalizerReference保留了如此多的内存。任何人都可以解释它吗?将不胜感激。

1 个答案:

答案 0 :(得分:0)

实际上不是。

我也遇到了这个问题,我创建了a separate question并在找到您的答案之前进行了回答。我想我实际上已经扎根了。

tldr:在进行性能分析时(像Memory Profiler一样)将FinalizerReference像其他任何类一样对待,导致在计算“保留大小”时重复计数相同的内存。因此,当前您(几乎总是)可以将Memory Profiler报告的FinalizerReference类的保留大小视为毫无意义。

正如评论中的Holger所述,通常只有该类的48 kB浅大小是重要的。但是,报告的约63 MB的保留大小甚至不包括引用者的内存,而仅递归计算FinalizerReference的其他实例。 (unconvinced? read more

但是这些引用对象确实很重要,尤其是其中任何一个在被垃圾收集之前只是等待被finalize()的那些对象。因此,正如Holger假定的那样,Memory Profiler 应该显示它们,因为其中很多将表明迫在眉睫的问题。

我认为这是Android Studio内存分析器中的错误,并且已提交this issue