Sorry for posting this twice. If a moderator wants to/can remove the duplicate go ahead.
On Aug 25, 2:56 pm, chrisr <[email protected]> wrote: > I created a simple application in an attempt to reproduce a memory > leak issue in our decently large GWT application. > > This test application basically contains a split panel with a button > on the left, and a tab panel full of large blocks of text on the > right. > Clicking the reload button fires the reloadRight method, and does a > panel.clear() to remove the old tab panel and a panel.add() to add a > new tab panel to the right panel. Doing this repeatedly causes memory > consumption to increase without bounds. > > For example, on the initial load IE7 uses around 35 MB. 125 clicks > later its using nearly 1.5GB. > > Is this example doing something in a fundamentally incorrect way? > How can I keep memory usage from exploding like this? > > /* Example Below */ > > package com.example.myproject.client; > > import com.google.gwt.core.client.EntryPoint; > import com.google.gwt.event.dom.client.ClickEvent; > import com.google.gwt.event.dom.client.ClickHandler; > import com.google.gwt.user.client.ui.Button; > import com.google.gwt.user.client.ui.DecoratedTabPanel; > import com.google.gwt.user.client.ui.DecoratorPanel; > import com.google.gwt.user.client.ui.HTML; > import com.google.gwt.user.client.ui.HTMLPanel; > import com.google.gwt.user.client.ui.HorizontalSplitPanel; > import com.google.gwt.user.client.ui.RootPanel; > > /** > * Entry point classes define <code>onModuleLoad()</code>. > */ > public class TestApplication01 implements EntryPoint { > > /** > * This is the entry point method. > */ > public void onModuleLoad() { > RootPanel.get("container").add( new MainPanel() ); > } > > private class MainPanel extends DecoratorPanel{ > > private HorizontalSplitPanel hsp; > private HTMLPanel lPanel; > private HTMLPanel rPanel; > private DecoratedTabPanel tabPanel; > int rightPanelCount = 0; > > public MainPanel(){ > hsp = new HorizontalSplitPanel(); > hsp.setSplitPosition("25%"); > hsp.setSize("800px", "400px"); > lPanel = new HTMLPanel("<div id=\"reloadButton\"/>"); > > rPanel = new HTMLPanel("<div > id=\"right-panel-contents\"/>"); > Button reloadButton = new ReloadButton(this); > reloadButton.setVisible(true); > lPanel.add( reloadButton, "reloadButton" ); > hsp.setLeftWidget(lPanel); > hsp.setRightWidget(rPanel); > this.add( hsp ); > reloadRight(); > } > > char[] chars = new char[] {' ',' ',' ', ' ', ' ', > 'a','b','c','d','e','f','g','h','i','j','k','l','m', > > 'n','o','p','q','r','s','t','u','v','w','x','y','z' }; > > private String getSomeText(int length){ > StringBuffer sb = new StringBuffer(length); > for ( int i=0; i<length; ++i ){ > > sb.append( chars[ (int)Math.round(Math.random()*(chars.length-1)) ]); > if ( i>0 && i % 60 == 0 ) > sb.append("<br>"); > } > return sb.toString(); > } > > protected void reloadRight(){ > ++rightPanelCount; > rPanel.clear(); > > tabPanel = new DecoratedTabPanel(); > tabPanel.setWidth("400px"); > tabPanel.setAnimationEnabled(true); > > String text = "Load count = "+rightPanelCount; > > tabPanel.add( new HTML(text+"<br>"+getSomeText((int) > (Math.random()*500)+500000)), "Tab One"); > tabPanel.add( new HTML(text+"<br>"+getSomeText((int) > (Math.random()*500)+500000)), "Tab Two"); > tabPanel.add( new HTML(text+"<br>"+getSomeText((int) > (Math.random()*500)+500000)), "Tab Three"); > tabPanel.add( new HTML(text+"<br>"+getSomeText((int) > (Math.random()*500)+500000)), "Tab Four"); > tabPanel.add( new HTML(text+"<br>"+getSomeText((int) > (Math.random()*500)+500000)), "Tab Five"); > tabPanel.selectTab(0); > > rPanel.add( tabPanel, "right-panel-contents" ); > } > > private class ReloadButton extends Button{ > > private MainPanel mainPanel; > > public ReloadButton(MainPanel p){ > super("Reload Right Panel"); > this.mainPanel = p; > this.addClickHandler(getClickHandler()); > } > > private ClickHandler getClickHandler(){ > return new ClickHandler(){ > > @Override > public void onClick(ClickEvent event) > { > mainPanel.reloadRight(); > } > }; > } > } > } > > > > } -- 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.
