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

Aol*_*phn 5 java android memory-management heap-memory

堆数据

我的应用程序无法在 android 4.x 上友好地运行,所以我只是分析我的应用程序的堆数据,我发现 java.lang.FinalizerReference 保留了这么多内存。任何人都可以解释它吗?任何想法都会受到赞赏。

Hen*_*ans 2

事实并非如此,真的。

我也遇到了这个问题,在找到你的问题和答案之前我创建了一个单独的问题和答案。我想我实际上已经找到了问题的根源。

tldr:在分析时像任何其他类一样对待 FinalizerReference(如 Memory Profiler 所做的那样),会导致在计算保留大小时重复计算相同的内存。因此,目前您可以(几乎总是)将 Memory Profiler 报告的 FinalizerReference 类的 Retained Size 视为毫无意义。

正如Holger在评论中指出的那样,只有类的 48 kB 浅层大小(在您的情况下)通常很重要。然而,所报告的大约 63 MB 的保留大小甚至不包括引用对象的内存,仅包括递归计算的 FinalizerReference 的其他实例。(不相信?阅读更多

但这些引用确实非常重要,尤其是那些在垃圾收集之前只是等待 Finalize() 的引用。因此,正如 Holger 所假设的那样,Memory Profiler应该显示它们,因为它们数量过多将表明存在迫在眉睫的问题。

我将此视为 Android Studio 内存分析器中的一个错误,并已提交此问题