2011-11-14 99 views
4

我正在使用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文件的循環的一部分。

任何有關「問題懷疑」是什麼的洞察力,如果他們造成內存泄漏和解決方法,將非常感激。

回答

0

你是對的:看和刪除泄漏 - 兩個不同的東西。如果有緊急需求 - 藉助Deleaker的幫助,您可以找到泄漏點,但它可以被本地化。