Память кучи бесконтрольно растет при генерации больших потоков данныхJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Память кучи бесконтрольно растет при генерации больших потоков данных

Сообщение Anonymous »

Я пытаюсь создать файл Excel с помощью Java Stream и SXSSFWorkbook для повышения эффективности использования памяти. Моя цель — обрабатывать большие наборы данных с ограничением размера кучи в 2 ГБ. Однако, несмотря на попытки очистить строки и управлять памятью, использование кучи продолжает расти, пока не закончится память. Для простоты я провел тест, используя временный файл для записи данных и ничего не возвращая.
Это мой код:

Код: Выделить всё

public String extractInformationAndGenerateExcel(String username, List comuniList, String uniqueFileName) throws IOException {

Path tempFilePath = Files.createTempFile("temp_", ".txt");
try (Stream contrattiEAttrezzatureStream = contrattiAttrezzatureRepository.getReportContrattiAttrezzature(username, comuniList);
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedWriter writer = Files.newBufferedWriter(tempFilePath, StandardOpenOption.WRITE)
)
{

logger.info("Start to write file??????");
contrattiEAttrezzatureStream.forEach(contratto -> {
try {
writer.write(contratto.toString());
writer.newLine();
} catch (IOException e) {
throw new UncheckedIOException(e);
}
});
logger.info("Finish");

return "Finish?";
}catch (Exception e) {
throw new RuntimeException(e);
}finally {

if (tempFilePath != null && Files.exists(tempFilePath)) {
try {
Files.delete(tempFilePath);
} catch (IOException e) {
logger.error("Error", e);
}
}
}

}
Однако использование памяти продолжает расти. Я использую следующие настройки JVM: -Xmx2g -XX:+UseSerialGC. Как видите, оперативная память ограничена 2ГБ и я не могу ее увеличить. Мой драйвер — jdbc.SQLServerDriver, и я использую SQLServer2019Dialect с Java 1.8.
Моя ситуация с использованием VisualVM такова
Изображение

Вот изображение профиля потока моего Java-приложения, показывающее время выполнения и состояние различных потоков:
Изображение

Вопросы:
  • Правильно ли использование Stream?
  • Правильно ли есть что-то, что я не рассматриваю?


Подробнее здесь: https://stackoverflow.com/questions/790 ... ta-streams
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»