繁体   English   中英

JasperFillManager.fillReportToFile的内存不足问题

[英]Out of memory issue with JasperFillManager.fillReportToFile

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM