gpt4 book ai didi

java - JFreeChart - Java 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 14:13:08 26 4
gpt4 key购买 nike

我第一次使用Jfreechart(jfreechart-1.0.13.jar)与struts1,java6,jboss4。我使用此代码来创建图表:

private JFreeChart getJfreeChart(int product, int msg) {

DefaultPieDataset dpd = new DefaultPieDataset();
dpd.setValue("product", product);
dpd.setValue("msg", msg);

JFreeChart chart = ChartFactory.createPieChart3D(null, dpd, true, false, false);

PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionPaint("product", new Color(51, 102, 153));
plot.setSectionPaint("msg", new Color(160, 218, 230));

plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}"));
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} : {1}"));

return chart;
}

在我的操作中,我确实喜欢这样显示图表:

response.setContentType("image/png");
ServletOutputStream outputStream = response.getOutputStream();
ChartUtilities.writeChartAsPNG(outputStream, chart, 900, 450);
outputStream.close();

在我的jsp中,我使用<img src="MyAction.do" />显示图表

当我执行 getJfreeChart 时,我注意到内存泄漏。我的代码有异常吗?

java.lang.OutOfMemoryError: PermGen space
at javax.swing.UIManager.initialize(Unknown Source)
at javax.swing.UIManager.maybeInitialize(Unknown Source)
at javax.swing.UIManager.getDefaults(Unknown Source)
at javax.swing.UIManager.getColor(Unknown Source)
at org.jfree.chart.JFreeChart.<clinit>(JFreeChart.java:261)
at org.jfree.chart.ChartFactory.createPieChart3D(ChartFactory.java:763)

最佳答案

首先,尝试增加 PermGen 空间。如果是真正的泄漏,您仍然会看到相同的错误,但至少应该延迟它。

另一个选项是允许类卸载:

-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

但是,这会导致垃圾收集速度变慢,因此不适合高负载系统(并且不适用于 Java 7 及以上版本)。

如果您在 JBoss(或任何其他应用服务器)中执行重复的“热部署”,请尽量避免这种情况并改为冷部署(如果可能)。如果不是,这显然不是问题的原因。

如果确实存在泄漏问题,最好的选择是找到原因并解决它。使用 jmap 等工具让您了解可能导致问题的候选者:

jmap -permstat <pid>

文档:http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

另请参阅此问题:How to dump Permgen?

最后,考虑升级到 Java 8,因为它消除了 PermGen 空间的概念。相反,数据要么成为堆的一部分(例如内部字符串),要么成为称为元空间的新区域 - 默认情况下会进行垃圾收集。

关于java - JFreeChart - Java 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com