我的页面中有 10 个图表,我每 1 分钟使用 poll
组件刷新它们。
但一小时后,我发现 Firefox 和 chrome 的内存超过 1 GB,有时甚至 Firefox 崩溃。
这是primefaces图表导致的内存泄漏吗? 我该如何解决这个问题?
这是我的示例应用程序的源代码:
在此代码中间隔设置为 3 秒,以便更快地看到问题!
<h:body>
<h:form id="timerForm">
<p:poll interval="3" widgetVar="timer" update=":chartPanel" autoStart="true" />
</h:form>
<p:panelGrid columns="2" id="chartPanel">
<p:lineChart id="chart1" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
<p:lineChart id="chart2" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
<p:lineChart id="chart3" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
<p:lineChart id="chart4" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
<p:lineChart id="chart5" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
<p:lineChart id="chart6" value="#{chartController.model}"
legendPosition="nw" style="height:200px;width: 500px;" minY="0" />
</p:panelGrid>
</h:body>
这是 Bean:
@Named
@RequestScoped
public class ChartController {
static final Logger log = Logger.getLogger(ChartController.class.getName());
@PostConstruct
private void init() {
}
private ChartSeries getData(String label) {
ChartSeries data = new ChartSeries();
data.setLabel(label);
for (int i = 1; i <= 20; i++) {
data.set(i, Math.random() * 1000);
}
if (data.getData().isEmpty()) {
data.set(0, 0);
}
log.log(Level.INFO, "Chart loaded for :{0}", label);
return data;
}
public CartesianChartModel getModel() {
CartesianChartModel chartModel = new CartesianChartModel();
chartModel.addSeries(getData("Data 1"));
chartModel.addSeries(getData("Data 2"));
chartModel.addSeries(getData("Data 3"));
return chartModel;
}
}
当我关闭浏览器时,它会完全释放内存。 这是要下载的源代码: 我已经上传了源代码,它是一个maven项目,只需下载它并在IDE中打开它并部署到您的应用服务器中即可。
最佳答案
组件在刷新前不会破坏资源。 我发现这是3.3.1版本中的一个bug,并在3.4-SNAPSHOT中修复
引用资料如下:
http://forum.primefaces.org/viewtopic.php?f=3&t=18286&hilit=chart+memory+leak
关于java - Primefaces 图表显示使用 poll 组件刷新时的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643630/