2015-01-20 2 views
0

У меня есть программа, которая анализирует файлы и сохраняет данные в базе данных mysql. Моя проблема в том, что пространство кучи (я использую VisualVM для их последующей работы) растет. И использование памяти (ps aux -sort -rss) также растет.Использование памяти Java постоянно растет до OutOfMemory Exception

Когда HeapSize достигает MaxHeapsize ~ 128 МБ, я получаю OutOfMemory-Exception.

Как я могу определить, какие данные это? Или что не связано?

heap size

ответ

3

Вам нужно сделать след памяти с помощью профилировщика памяти в VisualVM.

Простой способ сделать профиль памяти, чтобы запустить

jmap -histo:live {pid} | head 

Если вы используете SQL, наиболее вероятной причиной утечки памяти не в состоянии очистить свои ресурсы JDBC. Я предлагаю вам убедиться, что вы закрываете свои заявления и ResultSets.

+0

@ Арнаб благодарит вас за редактирование. –

+0

Я использую только одно готовое приложение, которое содержит вставку, поэтому нет ResultSet. Я на самом деле не закрывал его. Но я установил его равным нулю, может ли кто-нибудь объяснить, почему этого недостаточно? – user2071938

+0

Что такое peter, предложенное ниже, является очень возможной причиной. Просто чтобы добавить, может быть много других причин. Правильно ли вы закрыли потоки ввода/вывода? Используете ли вы String для хранения большого количества данных и изменения одной и той же строки в цикле? – Arnab