我正在面臨內存不足問題,同時生成多個小型PDF報告(比如50000報告,每個2-3頁,文件大小爲50到60 KB)。 3000報告生成後出現內存不足錯誤。JasperFillManager.fillReportToFile內存不足問題
執行下面的行後,我看到內存沒有被清理乾淨。
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();
任何有關如何在每個報告生成後清理內存的建議將會有所幫助。
[JRSwapFile](http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/util/JRSwapFile.html)需要一個配置,但不涉及第一個版本。你關閉所有的東西嗎? –
@JoopEggen:最終清除每個對象。沒有找到任何可關閉的對象。 virtualizer.cleanup()負責處理。我的場景是生成大量小文件,因此想知道Virtualizer是否有用。無論是否有虛擬化器,在執行最後一行後,我都沒有看到太多的內存被清理乾淨。 –
@ ad-inf我可以問你用於你的應用程序的模板文件嗎? .jrxml和.jasper在性能上可能會有很大差異。 – Dreamer