Android内存泄漏,EMA可疑:“byte ”由“”加载

我正在写一个小的单活动Android应用程序,并得到内存泄漏错误,因为我找不到原点。 首先,应用程序计算基本内容并以结构化方式显示结果。 计算是微不足道的,虽然有一些图像,但它们大约有50个图标,总共少于4MB。

我已经安装了Eclipse Memory Analyzer并检查了它的堆转储,Leak Suspects Report说:

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

dominator_tree

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

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

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

选择一个大对象,然后向下钻取。 这将显示从根集到对象的路径 – 保持此对象存活的引用链。 在下面的情况下,位图缓存是罪魁祸首

在此处输入图像描述

侧面注意从Android 3.0(Honeycomb)开始,Bitmap对象的像素数据存储在字节数组中(之前它没有存储在Dalvik堆中)