在生成多个小型 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();
任何关于如何在生成每个报告后清理内存的建议都会有所帮助。