2015-03-02 2 views
0

Загружая файлы .gapp с диска с помощью PersistenceManager.loadObjectFromFile, я получил «Исключение в потоке» main «java.lang.OutOfMemoryError: Java heap space» Ошибка. Я увеличил размер кучи до максимума 2048M и устранил проблему. Есть ли лучший альтернативный способ решить эту проблему при загрузке большого набора файлов .gapp.GATE PersistenceManager.loadObjectFromFile ошибка outofmemory при загрузке файлов .gapp

+0

Чтение «файлов» Я подозреваю, что вы загружаете несколько gapp в одном приложении Java - то, что редко требуется. Совет дедека хорош, но я также предлагаю вам рассмотреть вашу архитектуру и отделить ее, чтобы у вас были разные приложения Java для каждого gapp. – Yasen

ответ

0

Я думаю, что нет, если вы используете сборщик мусора по умолчанию. Для его работы нужен параметр max heap size. Обратите внимание, что память действительно нужна. Ошибка говорит о нехватке памяти для ваших приложений-затворов (загруженных файлов gapp).

Есть две вещи, которые вы можете сделать:

  1. Найти меньшее значение максимальный размер кучи параметра, который до сих пор работает.

  2. Уменьшите объем необходимой памяти. Например, путем обмена некоторыми крупными объектами (например, списками географических названий) между приложениями-затворами. Это можно сделать, используя Factory.duplicate(Resource). См. слайды от Developers GATE Course.

+0

Я не полностью согласен с 1. Обычно затворы создают много аннотаций для каждого документа, и хотя вы, вероятно, «выпускаете» документы, наличие некоторого количества кучи на границе может привести к тому, что GC будет работать чаще. Не говоря уже о том, что если вы установите размер кучи, достаточный для загрузки gapp, большой документ может вызвать ошибку «из памяти». – Yasen

Смежные вопросы