[Bug] java.lang.OutOfMemoryError: Java heap space при парсинге документов
Проблема, озвученная в https://github.com/ispras/dedoc/issues/489, полностью актуальна для версии 2.3 и 2.3.2 (докер образ). Полностью воспроизводится с тем же файлом из прошлого ишью.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.fontbox.cmap.CMap.readCode(CMap.java:165)
at org.apache.pdfbox.pdmodel.font.PDType0Font.readCode(PDType0Font.java:553)
at org.apache.pdfbox.contentstream.PDFStreamEngine.showText(PDFStreamEngine.java:690)
at org.apache.pdfbox.contentstream.PDFStreamEngine.showTextStrings(PDFStreamEngine.java:633)
at org.apache.pdfbox.contentstream.operator.text.ShowTextAdjusted.process(ShowTextAdjusted.java:53)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:849)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:495)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:469)
at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:142)
at org.apache.pdfbox.text.LegacyPDFStreamEngine.processPage(LegacyPDFStreamEngine.java:146)
at org.apache.pdfbox.text.PDFMarkedContentExtractor.processPage(PDFMarkedContentExtractor.java:41)
at model.Document.parseTags(Document.java:317)
at model.Document.load(Document.java:82)
at DedocTableExtractor.extract(DedocTableExtractor.java:148)
at DedocTableExtractor.run(DedocTableExtractor.java:118)
at DedocTableExtractor.main(DedocTableExtractor.java:72)
Скорее всего это связано с объемом оперативной памяти компьютера, на котором проводилось тестирование. На компьютере с размером ОП 8 Гб ошибка воспроизводится, на компьютере с размером ОП 64 Гб все отрабатывает без ошибок. Скорее всего уменьшить размер требуемой ОП не получится, так как файл большой, и ресурсов на его обработку требуется много.
@sunveil есть ли возможность уменьшить размер требуемой ОП компьютера при парсинге больших PDF?
Я заметил, что если отправлять большой файл, но просить распарсить только 2 страницы, то OOM не падает. Возможно есть какая-нибудь фича, чтобы включить парсинг файлов от 20-30мб чанками (по странично) и в конце склеивать результат будто все целиком за раз обработалось?
После тестирования файла в 23мб, я хотел бы попробовать 80мб и 100мб.
В документации не нашел, но может планируется добавить?
Фичи такой нет, но идея хорошая. Добавить можно, но скорее всего это будет нескоро