Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.OutOfMemoryError:java堆空间:尝试使用jasper exportreport方法_Java_Performance_Jasper Reports - Fatal编程技术网

java.lang.OutOfMemoryError:java堆空间:尝试使用jasper exportreport方法

java.lang.OutOfMemoryError:java堆空间:尝试使用jasper exportreport方法,java,performance,jasper-reports,Java,Performance,Jasper Reports,使用jaspers exportreport方法时内存出错。下面给出了堆栈跟踪 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.text.RuleBasedBreakIterator.readFile(Unknown Source) at java.text.RuleBasedBreakIterator.readTables(Unknown Source) at

使用jaspers exportreport方法时内存出错。下面给出了堆栈跟踪

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.text.RuleBasedBreakIterator.readFile(Unknown Source)
    at java.text.RuleBasedBreakIterator.readTables(Unknown Source)
    at java.text.RuleBasedBreakIterator.<init>(Unknown Source)
    at java.text.BreakIterator.createBreakInstance(Unknown Source)
    at java.text.BreakIterator.getBreakInstance(Unknown Source)
    at java.text.BreakIterator.getLineInstance(Unknown Source)
    at java.text.BreakIterator.getLineInstance(Unknown Source)
    at java.awt.font.LineBreakMeasurer.<init>(Unknown Source)
    at net.sf.jasperreports.engine.fill.TextMeasurer.renderParagraph(TextMeasurer.java:655)
    at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:367)
    at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:511)
    at net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:607)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:328)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:393)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:352)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2023)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:285)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:132)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540)
    at com.aricent.aircell.logpatternanalyzer.report.JasperReportUtils.exportReport(JasperReportUtils.java:86)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.text.RuleBasedBreakIterator.readFile(未知源) 位于java.text.RuleBasedBreakIterator.readTables(未知源) 位于java.text.RuleBasedBreakIterator。(未知源) 位于java.text.BreakIterator.createBreakInstance(未知源) 位于java.text.BreakIterator.getBreakInstance(未知源) 位于java.text.BreakIterator.getLineInstance(未知源) 位于java.text.BreakIterator.getLineInstance(未知源) 位于java.awt.font.LineBreakMeasurer。(未知源) 位于net.sf.jasperreports.engine.fill.textmasurer.renderParagraph(textmasurer.java:655) net.sf.jasperreports.engine.fill.textmasurer.measure(textmasurer.java:367) 位于net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:511) 位于net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:607) 位于net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:328) 位于net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:393) 位于net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:352) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2023) 位于net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:755) 位于net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:285) 位于net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:132) 位于net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:836) 位于net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:765) 位于net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) 位于net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) 位于net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:540) 在com.aricent.aircell.logpatternalyzer.report.JasperReportUtils.exportReport(JasperReportUtils.java:86)
我还尝试了内存泄漏分析器和jvisualvm来找出根本原因,但它显示
char[]
占了90%以上。如何找出此问题的确切根源。

您是否尝试过增加堆大小(Xmx)?报表导出可能只需要更多内存。它适用于较小的报告吗?

似乎Xmx设置是问题所在。你应该确保它设置得足够高。如果您怀疑还有其他问题,您可以在运行oom时创建heapdump,并检查是否存在泄漏对象。这可以通过添加两个参数来实现

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/heapdump

然后,您可以使用jvisualvm或EclipseMat(内存分析器工具)对其进行分析。

您是否尝试将虚拟化器用于fillReport


对于较小的报告,其工作正常。我已经尝试了1024的Xmx选项。即使我得到了异常,我还是建议进一步增加堆-如果可能的话。再试一试,真的有必要写这么大的报告吗?你能想出一些限制尺寸的办法吗?我两个都试过了。。。这表明char[]占用了更多内存。但是不知道如何找出这个问题的确切根源。您当前的xmx和xms设置是什么?