【问题标题】:Primefaces chart memory leak when refreshing with poll component使用轮询组件刷新时 Primefaces 图表内存泄漏
【发布时间】:2012-07-25 06:05:34
【问题描述】:

我的页面中有 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> 

这是豆子:

@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中打开它并部署在你的应用服务器中。

https://dl.dropbox.com/s/secmuo7vjasdaue/chart-bug.zip?dl=1

【问题讨论】:

    标签: java ajax jsf primefaces


    【解决方案1】:

    组件在刷新前不会销毁资源。 我发现这是3.3.1版本的一个bug,在3.4-SNAPSHOT修复了

    这是参考:

    http://forum.primefaces.org/viewtopic.php?f=3&t=18286&hilit=chart+memory+leak

    http://code.google.com/p/primefaces/issues/detail?id=4183

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2012-11-07
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      相关资源
      最近更新 更多