我的应用程序无法在android 4.x友好版本上运行,所以我只是在分析应用程序的堆数据,我发现java.lang.FinalizerReference保留了如此多的内存。任何人都可以解释一下吗? 。
最佳答案
确实不是。
我也遇到了这个问题,我创建了a separate question并在找到您的答案之前进行了回答。我想我实际上已经扎根了。
tldr:在进行概要分析时(像Memory Profiler一样)将FinalizerReference像对待其他任何类一样对待,导致在计算“保留大小”时重复计数相同的内存。因此,当前您(几乎总是)可以将Memory Profiler报告的FinalizerReference类的Retained Size视为无意义。
正如Holger在注释中指出的那样,通常只有该类的48 kB浅大小很重要。但是,报告的约63 MB的“保留大小”甚至不包括引用者的内存,仅递归计数的FinalizerReference的其他实例。 (unconvinced? read more)
但是这些引用对象确实很重要,尤其是其中任何一个在被垃圾回收之前只是等待被finalize()的那些对象。因此,正如Holger假设的那样,Memory Profiler应该向他们展示它们,因为其中很多表明存在迫在眉睫的问题。
我将其视为Android Studio的Memory Profiler中的错误,并提交了this issue。
关于java - 我想知道为什么FinalizerReference在我的应用程序中占用如此多的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52135012/