2012-07-25 73 views
1

我在我的頁面中有10個圖表,並且每隔1分鐘使用poll組件刷新它們。 但一小時後,我看到firefox和chrome得到了更多的1 GB內存,有時甚至發生了firefox崩潰。使用輪詢組件刷新時Primefaces圖表內存泄漏

這是由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

回答