Java Android内存泄漏,EMA怀疑:“;字节[]”;由“装载”&书信电报;系统级装载机>&引用;

Java Android内存泄漏,EMA怀疑:“;字节[]”;由“装载”&书信电报;系统级装载机>&引用;,java,android,arrays,memory-leaks,byte,Java,Android,Arrays,Memory Leaks,Byte,我正在编写一个单活动的android应用程序,出现了一个内存泄漏错误,因为我找不到源代码。 首先,该应用程序计算基本内容并以结构化方式显示结果。计算很简单,虽然有一些图像,但它们大约有50个图标,总共不到4MB 我已经安装了Eclipse内存分析器,并用它检查了堆转储,泄漏可疑报告说: 问题疑点1: 加载的477个“byte[]”实例占用78.116.240(76,46%)字节 支配树 我既不知道这些字节数组可能是什么,也看不到GC根或任何东西,因为这些数组在支配树中没有父级。我不经常为And

我正在编写一个单活动的android应用程序,出现了一个内存泄漏错误,因为我找不到源代码。 首先,该应用程序计算基本内容并以结构化方式显示结果。计算很简单,虽然有一些图像,但它们大约有50个图标,总共不到4MB

我已经安装了Eclipse内存分析器,并用它检查了堆转储,泄漏可疑报告说:

问题疑点1: 加载的477个“byte[]”实例占用78.116.240(76,46%)字节

支配树


我既不知道这些字节数组可能是什么,也看不到GC根或任何东西,因为这些数组在支配树中没有父级。我不经常为Android编程,我拼命想弄清楚,从今天起这里发生了什么。当我玩应用程序并观察ADM中使用的堆大小/%时,我会直接从80%的使用率开始,并随着时间的推移变得更大。(还显示了1字节数组(byte[],boolean[])直到应用程序在AVD上崩溃,我的真实设备才能处理更长的时间。我知道我可以使大小变大,但这对我来说不是解决方案,因为我认为我从一开始就遇到了这个问题,现在它刚刚达到临界点。

转到直方图视图:直方图视图显示了一个按实例数、浅堆(所有实例使用的内存总量)排序的类列表,或保留的堆(所有实例保持活动的内存总量,包括它们引用的其他对象)

在byte[]类上单击鼠标右键,然后选择List Objects>with incoming references。这将生成堆中所有字节数组的列表,您可以根据浅层堆使用情况对其进行排序

选择一个大对象,并深入研究它。这将向您显示从根集到对象的路径——使该对象保持活动状态的引用链。在下面的例子中,位图缓存是罪魁祸首

旁注
从Android 3.0(蜂巢)开始,位图对象的像素数据存储在字节数组中(以前没有存储在Dalvik堆中)

我自己也面临着类似的问题。具有所有字节数组和GC根路径的支配树是单字节数组本身。不是很有帮助