It seems that GWT widgets are leaking memory. For testing i have
created a sample application which create a series of panels
containing Labels. If i allocate 1000 panels and clear() all of them
there are still around 10000K memory remain to get free. Here is the
code i have written"
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class Test implements EntryPoint {
VerticalPanel tableRowContainer;
VerticalPanel mainVerticalPanel;
TextBox textbox;
/**
* This is the entry point method.
*/
public void onModuleLoad() {
Button addButton = new Button("Add");
Button removeButton = new Button("Remove");
Button clearButton = new Button("Clear");
Button exitButton = new Button("Exit");
tableRowContainer = new VerticalPanel();
mainVerticalPanel = new VerticalPanel();
textbox = new TextBox();
addButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
String tbText = textbox.getText();
int num = Integer.parseInt(tbText);
for (int i = 0; i< num ; i++) {
HorizontalPanel row = new HorizontalPanel();
Label l = new Label(" * First Label : " + i);
row.add(l);
l= null;
Label l1 = new Label(" ** Second Label : " +
i);
row.add(l1);
l1 = null;
Label l2 = new Label(" *** Third Label : " +
i);
row.add(l2);
l2 = null;
Label l3 = new Label (" **** Fourth Label :" +
i );
row.add(l3);
l3=null;
tableRowContainer.add(row);
row = null;
}
}
});
//This will explicitly remove each component added to panel
removeButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
String tbText = textbox.getText();
int num = Integer.parseInt(tbText);
int i=0, j=0;
// Window.alert("num " + num + "widgetcount " +
rowPanel.getWidgetCount());
if (num <= tableRowContainer.getWidgetCount()){
for (i = num - 1; i >= 0 ; i--) {
HorizontalPanel h =
(HorizontalPanel)tableRowContainer.getWidget(i);
for (j=3; j>=0; j--){
h.remove(j);
//Window.alert("removing j = " + j + " : " + h.remove(j));
}
tableRowContainer.remove(i);
// Window.alert("removing i " +
i + " : "+ rowPanel.remove(i));
// h.removeFromParent();
h = null;
}
}
}
});
clearButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
tableRowContainer.clear();
}
});
exitButton.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
//clear everything; which is uncleared till now.
tableRowContainer.clear();
mainVerticalPanel.clear();
tableRowContainer = null;
textbox = null;
mainVerticalPanel.removeFromParent();
RootPanel.get().remove(mainVerticalPanel);
//Only panel added is
verticalPanel.
mainVerticalPanel = null;
}
});
mainVerticalPanel.add(textbox);
mainVerticalPanel.add(addButton);
mainVerticalPanel.add(removeButton);
mainVerticalPanel.add(clearButton);
mainVerticalPanel.add(exitButton);
mainVerticalPanel.add(tableRowContainer);
RootPanel.get().add(mainVerticalPanel);
addButton = null;
removeButton= null;
clearButton = null;
exitButton = null;
}
}
I tried to free as much as possible. I dont know where the memory is
leaking. The unfreed memory is reclaimed once i closed the tab or
browser window itself. I have used Windows Task manager to check the
memory consumption.
Any help or pointer will be greately appreaciated.
Thanks,
Deepak
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.