У меня есть очень простой фрагмент кода, который выполняет итерацию по списку объектов базы данных и добавляет определенное свойство в StringBuilder. Теперь результаты иногда превышают 100K, поэтому операции добавления превышают 100KИщете альтернативу высокой производительности StringBuilder
Моя проблема заключается в том, что я не могу сократить количество итераций по мере необходимости. Но Stringbuilder продолжает захватывать кучу пространства. И выбрасывает OutOfMemoryException.
Кто-нибудь сталкивался с такой ситуацией и есть решение этой проблемы или альтернатива StringBuilder.
Вполне возможно, что то, что я делаю, также может быть ошибочным, поэтому, хотя код довольно простой, я опубликую его.
StringBuilder endResult = new StringBuilder();
if (dbObjects != null && !dbObjects.isEmpty()) {
for (DBObject dBO : dbObjects) {
endResult.append("Starting to write" + dBO.getOutPut() + "content");
endResult.append(dBO.getResults);
}
output.append("END");
}
Как я уже сказал, что это вполне возможно, что у меня будет 100000 результаты из БД
Если это бросает в 'OutOfMemoryException', то вы, вероятно, следует пересмотреть свой дизайн. Помните, что после этого вы вернете эту строку, и эта строка будет огромной. Вы должны рассмотреть возможность использования потока или чего-то еще. – Zizouz212
Результаты 100k для меня не очень похожи. Сколько памяти кучи выделяется для Java? 32-битная или 64-разрядная JVM? И сколько памяти в системе? (EDIT: параметр командной строки -Xmx для максимальной памяти, что вы используете) – markspace
@markspace IntX CompilerThreadStackSize = 0 uintx ErgoHeapSizeLimit = 0 uintx HeapSizePerGCThread = 87241520 uintx InitialHeapSize = 268435456 uintx LargePageHeapSizeThreshold = 134217728 uintx MaxHeapSize = 4294967296 IntX ThreadStackSize = 1024 IntX VMThreadStackSize = 1024 ява версия "1.8.0_65" Java (TM) SE Runtime Environment Java HotSpot (TM) 64-разрядного сервера VM (смешанный режим) –