Подозреваемая утечка памяти - PullRequest
4 голосов
/ 14 ноября 2011

Я использую анализатор памяти Eclipse для анализа дампа кучи для моего приложения, поскольку я думаю, что где-то происходит утечка памяти. Я не совсем уверен, что искать, но в отчете Leak Suspect в 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) разных размеров, но не более 1 МБ. Этот код является частью цикла, который анализирует около 5-6 XML-файлов.

Буду признателен за понимание того, что представляют собой "подозреваемые проблемы", если они вызывают утечку памяти и способ ее устранения.

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Проблема состоит в следующем: первое место, где нужно искать утечки памяти.Они являются основными видами использования памяти в вашем приложении по типу объекта.Вполне возможно, что у вас нет утечек памяти, но вы можете попытаться уменьшить использование памяти в целом, посмотрев сначала на эти объекты.

Вот некоторые ресурсы с дополнительной информацией

0 голосов
/ 15 ноября 2011

вы правы: видеть и устранять утечки - две разные вещи.Если есть срочная необходимость - с помощью Deleaker вы можете найти утечку, но ее можно локализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...