Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > java.lang.OutOfMemoryError: где утечка?


Автор: Andrey1 7.7.2008, 10:18
Столкнулся с проблемой, что при обработки данных из базы MySQL через Hibernate(JPA) возникает утечка памяти. Но совсем не ясно где (не ясно даже через какие объекты может быть утечка). 
Структура проги такова:

Код


    public static void main(String[] args)
    {

        // ... инициализация DAO классов...

        List<Person> persons = personDao.getData(...);

       // основной цикл: 
        for (
                Person person 
                : persons)
        {

       // ... используются только новые объекты, много new, есть циклы...

        ResultEntityObject result = new ResultEntityObject();
        ResultObjectDao.save(result);
        }
}


Прога постоянно отъедает память и в итоге вылетает с эксепшином: java.lang.OutOfMemoryError.

Может Hibernate сжирает память? Можно ли ему сказать, чтобы этого не делал? smile

Автор: onsh76 7.7.2008, 11:01
Причин может быть много... Прогони свою программу добавив вот такую опцию в команду java:
Код

-verbose:gc -XX:+PrintGCDetails

это подскажет тебе, сколько памяти требуется для проги. 
"Болезнь" может быть вылечена увеличением хипа и/или перм сайза:

Код

-Xmx512m and -Xmx1024m
-XX:MaxPermSize=256m


прими к сведению: по дефолту jvm выставляет мах перм сайз на 64 метра...
Удачи!  smile 

Автор: powerOn 7.7.2008, 11:02
С первого взгляда определить в чем проблема конечно же не получится.
Как вариант - у тебя нехватка памяти вызвана не утечкой, а просто её недостатком для выполнения задачи.
Как другой вариант - где-то ссылки висят, но тут нужно подробно анализировать код.

Автор: Andrey1 7.7.2008, 13:15
Запускаю с опцией:
Цитата(onsh76 @  7.7.2008,  11:01 Найти цитируемый пост)
-Xms400m -Xmx1000m

Этого не хватает...

Добавлено через 2 минуты и 27 секунд
Цитата(powerOn @  7.7.2008,  11:02 Найти цитируемый пост)
Как вариант - у тебя нехватка памяти вызвана не утечкой, а просто её недостатком для выполнения задачи.

Не похоже:
1) Нет запросов, которые бы стОлько данных потребовали;
2) Память отжирается постепенно и постоянно.

Добавлено через 9 минут и 47 секунд
Цитата(powerOn @  7.7.2008,  11:02 Найти цитируемый пост)
Как другой вариант - где-то ссылки висят, но тут нужно подробно анализировать код.

Где они могут висеть?... Висят только DAO классы и EntityManager"ы...

Попробовал запустить Profiler - так и не понял как посмотреть, в каком месте утечка (показывает только, что память отжирается на byte[] и char[]).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)