android - 疑似内存泄漏

标签 android memory-leaks memory-management

我正在使用 Eclipse 的内存分析器来分析我的应用程序的堆转储,因为我认为我在某处发生了内存泄漏。我不确定要寻找什么,但 MAT 中的 Leak Suspect 报告显示了 4 个“问题嫌疑人”,它们是:

 The class "org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnectionImpl", loaded by "<system class loader>", occupies 608,976 (16.15%) bytes. The memory is accumulated in one instance of "java.util.jar.JarFile" loaded by "<system class loader>".

 One instance of "org.apache.harmony.xml.ExpatParser" loaded by "<system class loader>" occupies 501,304 (13.29%) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "<system class loader>".

 127 instances of "org.bouncycastle.jce.provider.X509CertificateObject", loaded by "<system class loader>" occupy 451,280 (11.97%) bytes. These instances are referenced from one instance of "java.util.Hashtable$HashtableEntry[]", loaded by "<system class loader>"

 6,608 instances of "java.lang.String", loaded by "<system class loader>" occupy 407,824 (10.81%) bytes. 

我猜的最后一个是我使用了太多字符串?其他的我一无所知。我没有使用任何加密,所以我不知道为什么会显示 BouncyCaSTLe。

我能想到的唯一引起“怀疑”的代码是这样的:

 final InputStream stream = new URL(feedUrl).openConnection().getInputStream();

 Xml.parse(stream, Xml.Encoding.UTF_8, root.getContentHandler());
 stream.close();

我正在解析一些大小不一但不超过 1MB 的远程 XML 文件(使用 SAX)。此代码是解析大约 5-6 个 xml 文件的循环的一部分。

任何关于“疑似问题”是什么的见解,如果它们导致内存泄漏以及修复它的方法,将不胜感激。

最佳答案

怀疑的问题就是:首先寻找内存泄漏的地方。它们是按对象类型划分的应用程序中内存的主要用途。您很可能没有内存泄漏,但您可以通过首先查看这些对象来尝试减少内存使用量。

这里有一些包含更多信息的资源

关于android - 疑似内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116335/

相关文章:

android - 约束布局向下移动到屏幕边缘上方

javascript - 存在适用于 Android 的 stringByEvaluatingJavaScriptFromString

eclipse - 冷冻 eclipse

c - 通过动态分配从函数到另一个函数的数组 (C)

iphone - ARC 和 MRC 之间的区别

android - 将可绘制对象添加到 ImageView

android - LinearLayout 不渲染

ios - 如何正确释放CVMetalTextureCacheRef和CVMetalTextureRef类型

java - 通过 JProfiler 查找内存泄漏

c++ - 这种类型的内存管理有用例吗?