JasperFillManager.fillReportToFile的内存不足问题

时间:2013-02-05 19:03:20

标签: java jasper-reports

我在生成多个小型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();

有关如何在生成每个报告后清理内存的任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

不确定pojo或传统的JSP Web应用程序,但是对于我的spring应用程序,它曾经有过相同的内存不足问题。我退出跟踪日志记录并找到有关渲染模板的大量信息。它让我记住jrxml是预编译模板而不是.jasper。所以我替换了所有模板,然后内存问题再也不会发生。请将此视为@Joop Eggen建议的补充。