У меня есть программа, которая пишет, а затем зашифровывает большое количество операторов SQL в файл. Однако иногда пользователь может выбрать большое количество элементов для генерации операторов SQL. Например, в zip-файле SQL может содержаться 4 файла, каждый из которых имеет длину более 1 миллиона символов.Уменьшить использование памяти ToStringBuilder (apache commons)?
В настоящее время генерации SQL зависит от функции:
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
Однако это вызывает огромный всплеск в использовании памяти и результатов в программе разбивая из «java.lang.OutOfMemoryError: Java кучу пространства» ошибка Я попытался увеличить размер кучи, но программа все еще медленна и все еще иногда сбой.
Есть ли способ уменьшить потребление памяти вышеупомянутым методом? Он должен быть весь объект, выводимый как строка (а не только его название). Ниже приводится график загрузки приложения, незанятый на некоторое время, а затем попытка перед запуском.
А вот что использует память:
Немного информации, чтобы получить обоснованное предположение. Можете ли вы предоставить код для написания файла? – lwi
Вы должны изменить свой подход здесь, я думаю, что если вы используете объект File, чтобы сохранить результат этого sql, вы бы решили вашу проблему, также лучше было бы написать zip из объекта File. –
Поскольку «ToStringBuilder» принимает только «StringBuffer», а не поток вывода, кажется, что для его хранения требуется целая строка объектов в памяти до записи в файл. Вы можете изучить другой метод, который позволит вам сбрасывать строку при анализе pojos. –