我正在使用Eclipse的内存分析器来分析我的应用程序的堆转储,因为我认为我在某个地方遇到了内存泄漏。我不是很确定要找什么,但是MAT中的泄漏嫌疑人报告显示了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();我正在解析一些远程XML文件(使用SAX),大小不一,但不超过1MB。这段代码是解析大约5-6个xml文件的循环的一部分。
任何关于“问题嫌疑人”是什么的洞察,如果他们导致了内存泄漏和修复它的方法,我们将非常感激。
发布于 2011-11-14 09:37:57
疑似问题的地方就是:首先寻找内存泄漏。根据对象类型,它们是应用程序中最常用的内存。您很有可能没有内存泄漏,但是您可以尝试通过首先查看这些对象来减少内存使用量。
下面是一些包含更多信息的参考资料
发布于 2011-11-15 23:55:31
您是对的:查看和删除泄漏-这是两件不同的事情。如果有紧急需求-借助help Deleaker,您可以找到泄漏,但可以将其本地化。
https://stackoverflow.com/questions/8116335
复制相似问题