Android内存泄漏,EMA可疑:&#34; byte []&#34;由&#34; <system class =“”loader =“”>&#34;

时间:2016-03-11 15:01:24

标签: java android arrays memory-leaks byte

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

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

问题疑似1: &#34; byte []&#34;的477个实例,由&lt;系统类加载器&gt;占用78.116.240(76,46%)字节。

dominator_tree

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

1 个答案:

答案 0 :(得分:5)

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

右键单击byte []类,然后选择List Objects&gt;有来电参考。这将生成堆中所有字节数组的列表,您可以根据浅堆使用情况对其进行排序。

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

enter image description here

SIDE NOTE 从Android 3.0(Honeycomb)开始,Bitmap对象的像素数据存储在字节数组中(以前它没有存储在Dalvik堆中)