I’m trying to do a stress test of vaadin web project, I use BeanItemContainer to wrap a
static
list of data beans and display it in Table.
It uses over
2G memory with 100 concurrent threads
, and
over 0.75G with 10
, it seems BeanItemContainer clone the list instead of just use it directly.
Are there any configs, settings or other patterns that can display a table with less memory consumption?
My test sample:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Vaadin Web Application</display-name>
<context-param>
<description>Vaadin production mode</description>
<param-name>productionMode</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>Vaadin</servlet-name>
<servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
<init-param>
<description>Vaadin UI to display</description>
<param-name>UI</param-name>
<param-value>test.vaadin.table.TableUI</param-value>
</init-param>
<init-param>
<param-name>disable-xsrf-protection</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Vaadin</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
TableUI.java
package test.vaadin.table;
import java.util.List;
import com.vaadin.annotations.Title;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.server.VaadinRequest;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
@Title("Table")
public class TableUI extends UI {
private static final long serialVersionUID = -6777271979317811922L;
private static List<Data> _list;
BeanItemContainer<Data> dataBeans = createDummyDatasource();
private Table dataTable = new Table("test", dataBeans);
protected void init(VaadinRequest request) {
initLayout();
}
@SuppressWarnings("deprecation")
private void initLayout() {
dataTable.setPageLength(50);
dataTable.setHeight("350px");
dataTable.setWidth("350px");
dataTable.setVisibleColumns(new String[] { "fieldOne", "fieldTwo", "fieldThree",
"fieldFour", "fieldFive", "fieldSix",
"fieldSeven", "fieldEight", "fieldNine",
"fieldTen"});
dataTable.setDebugId("test");
setContent(dataTable);
}
private BeanItemContainer<Data> createDummyDatasource() {
if (_list == null) {
try {
_list = Data.getTestData();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
BeanItemContainer<Data> bc = new BeanItemContainer<Data>(Data.class, _list);
return bc;
}
}
Data.java
package test.vaadin.table;
import java.util.ArrayList;
import java.util.List;
public class Data {
private static List<Data> _testData;
private String _fieldOne;
private String _fieldTwo;
private String _fieldThree;
private String _fieldFour;
private String _fieldFive;
private String _fieldSix;
private String _fieldSeven;
private String _fieldEight;
private String _fieldNine;
private String _fieldTen;
public Data (String fieldOne, String fieldTwo,
String fieldThree, String fieldFour, String fieldFive,
String fieldSix, String fieldSeven, String fieldEight,
String fieldNine, String fieldTen) {
_fieldOne = fieldOne;
_fieldTwo = fieldTwo;
_fieldThree = fieldThree;
_fieldFour = fieldFour;
_fieldFive = fieldFive;
_fieldSix = fieldSix;
_fieldSeven = fieldSeven;
_fieldEight = fieldEight;
_fieldNine = fieldNine;
_fieldTen = fieldTen;
}
public void setFieldOne (String fieldOne) {
_fieldOne = fieldOne;
}
public String getFieldOne () {
return _fieldOne;
}
public void setFieldTwo (String fieldTwo) {
_fieldTwo = fieldTwo;
}
public String getFieldTwo () {
return _fieldTwo;
}
public void setFieldThree (String fieldThree) {
_fieldThree = fieldThree;
}
public String getFieldThree () {
return _fieldThree;
}
public void setFieldFour (String fieldFour) {
_fieldFour = fieldFour;
}
public String getFieldFour () {
return _fieldFour;
}
public void setFieldFive (String fieldFive) {
_fieldFive = fieldFive;
}
public String getFieldFive () {
return _fieldFive;
}
public void setFieldSix (String fieldSix) {
_fieldSix = fieldSix;
}
public String getFieldSix () {
return _fieldSix;
}
public void setFieldSeven (String fieldSeven) {
_fieldSeven = fieldSeven;
}
public String getFieldSeven () {
return _fieldSeven;
}
public void setFieldEight (String fieldEight) {
_fieldEight = fieldEight;
}
public String getFieldEight () {
return _fieldEight;
}
public void setFieldNine (String fieldNine) {
_fieldNine = fieldNine;
}
public String getFieldNine () {
return _fieldNine;
}
public void setFieldTen (String fieldTen) {
_fieldTen = fieldTen;
}
public String getFieldTen () {
return _fieldTen;
}
public static List<Data> getTestData () {
if (_testData == null) {
_testData = new ArrayList<Data>();
for (int i = 0; i < 2000; i++) {
_testData.add(new Data("fieldOne_" + "i", "fieldTwo_" + "i", "fieldThree_" + "i",
"fieldFour_" + "i", "fieldFive_" + "i", "fieldSix_" + "i",
"fieldSeven_" + "i", "fieldEight_" + "i", "fieldNine_" + "i",
"fieldTen_" + "i"));
}
}
return _testData;
}
}
Regards,
kabi