複数の小さな PDF レポート (たとえば、50000 件のレポート、それぞれ 2 ~ 3 ページ、ファイル サイズ 50 ~ 60 KB) を生成しているときに、メモリ不足の問題に直面しています。3000 件のレポートが生成された後に発生するメモリ不足エラー。
以下の行を実行した後、メモリがクリーンアップされていないことがわかります。
JasperFillManager.fillReportToFile(compiledPath,
file.getPath(), null, dataSource);
JRSwapFileVirtualizer を使用して以下の代替コードを試しましたが、問題は解決しませんでした。
dataSource = new JRBeanArrayDataSource(myBean);
swapFile = new JRSwapFile(outputFileLocation, 1024, 1024);
virtualizer = new JRSwapFileVirtualizer(3,swapFile, true);
parameterMap = new HashMap();
parameterMap.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
JasperFillManager.fillReportToFile(compiledPath,
file.getPath(), parameterMap, dataSource);
dataSource = null;
virtualizer.cleanup();
jasperPrint = (JasperPrint) JRLoader.loadObject(file);
compiledPath = null;
file = null;
pdfExporter = new JRPdfExporter();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,
finalOutputfile.toString());
pdfExporter.exportReport();
各レポートが生成された後にメモリをクリーンアップする方法についての提案は役に立ちます。