Nano Hash - криптовалюты, майнинг, программирование

JAVA POI не хватает памяти

Я хотел создать отчет excel (xlsx) с 500000 записей и почти 10 столбцов. С jboss 512M и apache poi (3.9).

JVM разбился из-за ошибки нехватки памяти, как и ожидалось, поскольку пользовательская модель poi имеет проблемы с памятью.

Поэтому я попытался использовать SXSSFWorkbook, предоставив временный каталог для сброса строк на диск. Отчет сгенерировался без проблем.

  1. Я создаю отчет о веб-приложении, в котором я пишу workbbok для потока OP сервлета. Будет ли это вызывать какие-либо проблемы, если несколько пользователей попытаются получить отчет в одно и то же время, поскольку временный каталог используется несколькими потоками.

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

  3. Также ниже код безопасен? Так как я распоряжаюсь перед закрытием выходного потока, но после того, как рабочая книга записывается в выходной поток.

    workbook.write(out);
    workbook.dispose();     
    out.flush();
    out.close(); 
    
10.03.2015

  • Некоторые люди заново создают стили в цикле, что приводит к OOME. Вы должны проверить свой код на это. 10.03.2015
  • Насчет 3. почему бы не распоряжаться в конце. Возможно, из-за размеров данных буфер записи в это время просто записывается. flush выполняется close и не требуется. Возможно, это 10.03.2015
  • после поиска в Google для проблемы 3 я думаю, что мне не нужно сбрасывать и закрывать выходной поток, поскольку этот поток управляется контейнером сервлета. 10.03.2015

Ответы:


1
  1. использовать File.createTempFile()
  2. используйте File.deleteOnExit() плюс

try { /*...*/ } finally { file.delete() }

блокировать.

  1. Я думаю, что это безопасно.
10.03.2015
  • Я не создаю и не удаляю временные файлы. Это делается внутри Apache POI API с SXSSFWorkbook, где мне нужно указать каталог Temp, чтобы сбросить лишние строки из памяти. Вопрос в том, безопасно ли это, поскольку это веб-приложение, и будет несколько запросов (потоков), поэтому один поток, размещающий временный файл, не должен конфликтовать с другими временными файлами запросов во время создания отчета. 10.03.2015

  • 2

    Это должно быть безопасно, так как POI использует File.createTempFile() внутри — код находится в org.apache.poi.util.TempFile.createTempFile(String, String). Однако, если вы используете несколько веб-приложений (с отдельными JVM), у вас могут возникнуть проблемы, если вы не установили свойство poi.keep.tmp.files - POI создает свои временные файлы внутри подкаталога с именем poifiles внутри временного каталога и пытается удалить его при выходе. . Это вызовет проблемы, если другие JVM с POI все еще работают.

    11.03.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..