JasperReports内存泄漏

6

我在一款Web应用程序中工作,它使用了JasperReports 5(jasperreports-5.0.1.jar),但会出现内存泄漏,直到java.lang.OutOfMemoryError,这个应用程序生成10至100页之间的动态报告。

为了了解情况,我正在使用MAT,如下图所示,JasperReports正在保留内存:

net.sf.jasperreports.engine.export.legacy.BorderOffset$1

按包分组的直方图: Histogram of grouped by package

Histogram中的Plantilla和SubReport是与我们使用JasperReports生成的报告相关的类名。

此Web应用程序运行在以下环境中:

-WebLogic 11g

-jrockit-jdk1.6.0_45-R28.2.7-4.1.0

-Xms2048m -Xmx2048m

-Oracle Linux

如果您遇到类似的问题,请让我知道您的经验。


  1. 也许你的代码没有释放资源。你的代码中的资源管理怎么样了?
  2. 你尝试使用JR 6.3版本(或6.2)了吗?
  3. 你尝试使用Oracle jre/jdk和jdk8了吗?
- Alex K
1
尝试在jasperreports.properties中将net.sf.jasperreports.evaluator.class.reference.fix.enabled属性设置为false,这可能会有所帮助。 - dada67
资源管理是什么意思?我没有尝试使用另一个JR版本,因为在生产环境中我们只能使用Oracle JDK,这不是一个选择。 - dogmeat
@dogmeat,你试过@data67提供的解决方案了吗? - Alex K
1个回答

3

使用.jasper文件来填充报表,而不是.jrxml文件,因为.jasper是编译格式,而.jrxml是未编译的。无论在何处使用.jrxml来填充报表,它都会先进行编译,然后再进行其余处理,这会导致更多的内存消耗。


是的,实际上我文件系统里只有.jasper文件,谢谢! - dogmeat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接