Пространство кучи Java в зацикленной функции - PullRequest
0 голосов
/ 12 мая 2011

Привет У меня есть Java-приложение, которое обрабатывает несколько записей из базы данных.Теперь, после обработки около 160 из них, Java запускает «OutOfMemoryError: Java heap space».В связи с этим я обновил всю функцию, чтобы обрабатывать только 150 записей за один раз, что прекрасно работает, когда я просто вызываю эту функцию один раз, однако проблема заключается в том, что мне нужно обработать около 10000 записей, что означает, что у меня естьчтобы вручную запустить ту же функцию более 60 раз.

Мой вопрос: есть ли способ, которым я могу поместить эту функцию в цикл и запускать ее несколько раз, не сталкиваясь с проблемой.Я не могу понять, почему она сталкивается с этой проблемой, поскольку функция является самодостаточной и не использует никакие данные, сгенерированные предыдущим вызовом функции (как я уже говорил, я мог бы вручную запустить функцию в течение примерно 60 раз иполучить желаемый результат).

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

Скорее всего, вы не закрываете свои Statement (s) и / или ResultSet (s). Они могут потреблять много ресурсов, пока открыты. Обязательно закройте их, когда закончите с ними!

0 голосов
/ 23 июня 2014

Одной из наиболее вероятных причин этих проблем является неправильная обработка открытых каналов / ресурсов. Пожалуйста, убедитесь, что каждая открытая ручка закрыта после выполнения своей работы. Open ResultSets потребляет много ресурсов памяти. Также не рекомендуется зависеть только от JVM для управления памятью. Тщательно написанный код в значительной степени приведет к оптимизированному коду даже без преднамеренного действия.

0 голосов
/ 12 мая 2011

Я думаю, что вызывать функцию к севеларовым временам - не самый лучший способ.ИМХО, вы должны написать процедуру хранения, которая обрабатывает все данные.База данных подготовлена ​​для обработки большого количества данных.

...