Android内存泄漏,EMA可疑:"byte []"由"<system class loader>"加载

pet*_*erg 3 java arrays android byte memory-leaks

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

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

问题可疑1:由<system class loader>加载的"byte []"的477个实例占用78.116.240(76,46%)个字节.

dominator_tree

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

Ovo*_*eta 5

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

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

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

在此输入图像描述

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