java - JasperFillManager.fillReportToFile 内存不足问题

标签 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();

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

最佳答案

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

关于java - JasperFillManager.fillReportToFile 内存不足问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14714924/

相关文章:

java - RFIDRW-E-232 无法理解来自 Raspberry Pi 的命令

Java 格式 数量/金额

mysql - Squirrel 和 Jasper SQL 结果不同

jasper-reports - 让 JasperSoft 的 iReport 与子报表和分页符完美配合

Java源代码依赖关系图

Java,Hibernate java.lang.ClassCastException : org. hibernate.collection.PersistentSet 无法转换为 java.util.HashSet

java - 包装 JTextArea 没有获得足够的空间/窃取空间

java - 需要sql语句支持搜索数据库,一直出现no database shown的错误提示

java - 碧 Jade 报告 : filling a report throws an exception “TargetInvocationException”

jasper-reports - 主报告不显示 Jaspersoft Studio 中使用 Java Beans 的基本子报告