我面临与内存消耗相关的问题,绘制60个LineCharts将消耗超过600 MB的Ram。
使用过的软件:
问题描述:
内存问题出现在webbrowser进程(客户端站点)中。在另一台服务器上运行的Wildfly运行良好(服务器端)。
代码和UI说明:
bean代码段(请求范围)
public List<LineChartModel> getDataModelShowingThePortfolioOfThisInvestor () {
//return this.getDataModelShowingThePortfolioOfThisInvestor("Warren Buffett");
listModel.clear();
for (int i=0;i<60;i++){
data = new ChartSeries();
model = new LineChartModel();
data.set("2004", 1000);
data.set("2005", 1170);
data.set("2006", 660);
data.set("2007", 1030);
data.set("2008", 1170);
data.set("2009", 660);
data.set("2010", 1030);
model.addSeries(data);
model.setTitle(new Integer(i).toString());
model.setLegendPosition("e");
model.setLegendPlacement(LegendPlacement.OUTSIDEGRID);
model.setShowPointLabels(false);
model.setZoom(true);
//Y-Axis settings
Axis yAxis = model.getAxis(AxisType.Y);
yAxis.setLabel("Stock Volume");
//X-Axis settings
DateAxis xAxis = new DateAxis();
xAxis.setTickAngle(-50);
xAxis.setTickFormat("%y %b");
//add axes to model
model.getAxes().put(AxisType.X, xAxis);
listModel.add(model);
}
return listModel;
}
jsf模板代码段
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
<title><ui:insert name="title"> Beta Application </ui:insert></title>
<p:layout fullPage="true">
<p:growl id="message"></p:growl>
<p:layoutUnit position="center">
<ui:insert name="center" />
</p:layoutUnit>
</p:layout>
</h:head>
</h:html>
jsf code snippet
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:body>
<ui:composition template="template.xhtml">
<ui:define name="center">
<ui:repeat var="model" value="#{primefaceChartController.getDataModelShowingThePortfolioOfThisInvestor()}" varStatus="status">
<p:chart type="line" model="#{model}" style="height:300px;"/>
</ui:repeat>
</ui:define>
</ui:composition>
</h:body>
</h:html>
当更改jsf代码段以排除模板时,刷新站点后将不再出现累积内存使用问题。内存利用率将是例如。
jsf代码段(已移除模板)
<h:html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<script name="jquery/jquery.js" library="primefaces"></script>
</h:head>
<h:body>
<ui:repeat var="model"
value="#{primefaceChartController.getDataModelShowingThePortfolioOfThisInvestor()}"
varStatus="status">
<p:chart type="line" model="#{model}" style="height:300px;" />
</ui:repeat>
</h:body>
</h:html>
答案 0 :(得分:0)
我手动包含jQuery并将布局放在<h:head>
标记中。这会导致每次点击“重新加载当前页面”后的累计总内存利用率。网页浏览器的按钮(刷新网站)。非常感谢Kukeltje的帮助