I've been able to reproduce a leak in pure JavaScript without any GWT. This issue is described in the Maps API issue tracker
http://code.google.com/p/gmaps-api-issues/issues/detail?id=945 I attached some sample JavaScript for creating a pool of markers instead of removing them from the map. -Eric. On Wed, Feb 25, 2009 at 9:48 AM, koalina <[email protected]> wrote: > > hi all, > I've tried as suggested by jason with this semplified piece of code: > public class MainEntryPoint implements EntryPoint{ > > private Marker marker; > private MapWidget map; > > public MainEntryPoint() { > } > > /** > * The entry point method, called automatically by loading a > module > * that declares an implementing class as an entry-point > */ > public void onModuleLoad() { > > > > > > map = new MapWidget(LatLng.newInstance(38.1890087, > 15.5648162), 12); > > map.checkResizeAndCenter(); > RootPanel.get().add(map); > Timer t = new Timer(){ > �...@override > public void run() { > for (int i = 0; i < 10; i++) > { > map.clearOverlays(); > map.addOverlay(createMarker()); > } > } > }; > t.scheduleRepeating(3000); > > //180209Miki:per prima cosa devo caricare le api > *dinamicamente* > //...poi tutto il resto di conseguenza > > //lookupKey(Window.Location.getHost()); > > > } > public Marker createMarker() > { > marker = null; > marker = new Marker(LatLng.newInstance(new Double(15), new > Double(38))); > return marker; > > > > } > } > > I would expect memory doesn't increase.. it doesn't > clearOverlays does not remove references with ie7 > any workaround...? > please help, thx, > Michela > > On 24 Feb, 20:22, koalina <[email protected]> wrote: >> commenting the addOverlay, memory usage is costant... >> that's why i think there's something wrong with the clearOverlays.. >> thx for help, >> michela >> >> On Feb 24, 5:47 pm, Eric Ayers <[email protected]> wrote: >> >> > Yeah, you are right. >> >> > One thing you could try is to comment out the 'addOverlay()' call and >> > measure your memory again. You won't see anything, but it will tell >> > you if this is the problem. >> >> > On Tue, Feb 24, 2009 at 11:39 AM, koalina <[email protected]> wrote: >> >> > > but i call the clerOverlays each time i run the timer.. at each loop >> > > the markers should be deallocated... aren't they? >> > > Michela >> >> > > On 24 Feb, 17:31, Eric Ayers <[email protected]> wrote: >> > >> Think about what your code is doing here. >> >> > >> You are allocating marker objects and adding them to the map every >> > >> time your timer expires. >> > >> The map will track these things for you until you call >> > >> map.removeOverlay(). >> >> > >> My guess is that you have hundreds of markers added to the map, all >> > >> stacked on top of each other. >> >> > >>http://gwt-google-apis.googlecode.com/svn/javadoc/maps/1.0/index.html >> >> > >> On Tue, Feb 24, 2009 at 6:57 AM, koalina <[email protected]> wrote: >> >> > >> > Hi all, I've found the cause of the memory leak isolating by some >> > >> > piece of code. It seems not to be caused by gwt-ext but when I make >> > >> > the map.addOverlay(createMarker(point, myObject)); >> >> > >> > where createMarker is: >> >> > >> > Icon icon = Icon.newInstance(baseIcon); >> >> > >> > icon.setImageURL(GWT.getModuleBaseURL()+"images/"+getColor >> > >> > (nave)+"_ship.png"); >> >> > >> > GWT.log("Carico immagine "+icon.getImageURL(), null); >> > >> > LabeledMarkerOptions options = LabeledMarkerOptions.newInstance >> > >> > (); >> > >> > options.setTitle(nave.getNomeNave()); >> > >> > options.setIcon(icon); >> >> > >> > options.setLabelText(String.valueOf(nave.getIdNave())); >> >> > >> > options.setLabelClass("labeledMarker"); >> >> > >> > //200209Miki: se l'id nave è lungo una solo cifra va bene >> > >> > così... >> > >> > if((Integer.toString(nave.getIdNave())).length()==1) >> > >> > options.setLabelOffset(Size.newInstance(1, -26)); >> > >> > //altrimenti devo shiftare la label di due posti a sinistra... >> > >> > else >> > >> > options.setLabelOffset(Size.newInstance(-2, -26)); >> > >> > // >> >> > >> > LabeledMarker marker = new LabeledMarker(point, options); >> >> > >> > ((Marker)marker).addMarkerClickHandler(new MarkerClickHandler >> > >> > () { >> >> > >> > public void onClick(MarkerClickEvent event) { >> > >> > //050209Miki: gestisco qui il popup informativo >> > >> > InfoWindow info = map.getInfoWindow(); >> > >> > info.open(event.getSender(), >> >> > >> > new InfoWindowContent( >> > >> > "<div style='width:150px;height:65px; font-size:12px' >> > >> > " + >> > >> > "class='info-window'>" + >> > >> > //"<p><img width='35px' src='"+GWT.getModuleBaseURL() >> > >> > +"'images/logonave.png' align='left'></p>" + >> > >> > "Nome nave: <b>"+nave.getNomeNave()+"</b><br/>" + >> > >> > "Localita' Partenza: " +nave.getLocalitaPartenza() >> > >> > +"<br/>" + >> > >> > "Localita' Arrivo: "+nave.getLocalitaPartenza()+"<br/ >> > >> >>" //+ >> > >> > //"Merci Pericolose a Bordo: " + >> > >> > nave.getMerciPericolose()+"<br/></div>" >> > >> > )); >> >> > >> > } >> >> > >> > }); >> >> > >> > return marker; >> >> > >> > It' squite strange but now I'm sure the issue is with this piece of >> > >> > code.. >> > >> > is map.clearOverlays(); sufficient to deallocate the previous >> > >> > markers? >> > >> > thx, >> > >> > Michela >> >> > >> > On 24 Feb, 10:56, Alexey_Tsiunchik <[email protected]> wrote: >> > >> >> Hello, >> >> > >> >> We already have discussion about GWT memory management >> > >> >> here:http://groups.google.com/group/Google-Web-Toolkit/browse_thread/threa... >> >> > >> >> Tuesday, February 24, 2009, 11:31:44 AM, you wrote: >> >> > >> >> > I've tried reloading, I made a mistake some posts ago.. memory >> > >> >> > decreases only if the browser is closed and then opened again. Only >> > >> >> > reloading causes a bigger increment of memory usage. >> > >> >> > On 24 Feb, 10:20, koalina <[email protected]> wrote: >> > >> >> >> Hi alex, >> > >> >> >> sorry but I can't see how fix the number of rows as I'm using a >> > >> >> >> memoryProxy object. >> > >> >> >> So, the timer is defined as follows: >> > >> >> >> Timer t = new Timer() { >> >> > >> >> >> public void run() { >> > >> >> >> getShipInfo(); >> >> > >> >> >> } >> >> > >> >> >> }; >> > >> >> >> where getShipInfo() is >> >> > >> >> >> private void getShipInfo() { >> >> > >> >> >> >> > >> >> >> MainEntryPoint.getServiceWsNaviInMare().getInfoNaviInMare(new >> > >> >> >> AsyncCallback() { >> >> > >> >> >> public void onFailure(Throwable caught) { >> > >> >> >> throw new UnsupportedOperationException("Not >> > >> >> >> supported >> > >> >> >> yet."); >> > >> >> >> } >> >> > >> >> >> public void onSuccess(Object result) { >> > >> >> >> Vector listaNavi = (Vector) result; >> > >> >> >> GWT.log("Lista Navi Ricevuta: >> > >> >> >> "+listaNavi.toString(), >> > >> >> >> null); >> > >> >> >> if (listaNavi.size()>0) { >> >> > >> >> >> Object[][] data = new Object[listaNavi.size()] >> > >> >> >> [15]; >> > >> >> >> Iterator i = listaNavi.iterator(); >> > >> >> >> int index = 0; >> >> > >> >> >> while (i.hasNext()) { >> > >> >> >> Nave unaNave = (Nave) i.next(); >> > >> >> >> data[index] = new Object[]{ >> > >> >> >> unaNave.getIdNave(), >> > >> >> >> unaNave.getNomeNave >> > >> >> >> (), >> >> > >> >> >> unaNave.getLocalita(), >> > >> >> >> unaNave.getImbarco >> > >> >> >> (), >> >> > >> >> >> etc.... >> >> > >> >> >> GWT.log("Nave "+data[index][0]+data[index] >> > >> >> >> [1].toString(), null); >> >> > >> >> >> index++; >> > >> >> >> unaNave = null; >> >> > >> >> >> } >> > >> >> >> if (store!=null) { >> > >> >> >> store.removeAll(); >> > >> >> >> } >> > >> >> >> MemoryProxy proxy = new MemoryProxy(data); >> > >> >> >> ArrayReader reader = new >> > >> >> >> ArrayReader(recordDef); >> > >> >> >> store = new Store(proxy, reader); >> > >> >> >> store.load(); >> > >> >> >> store.commitChanges(); >> >> > >> >> >> grid.reconfigure(store, columnModel); >> > >> >> >> //240209Miki: x diminuire memory leak ... >> > >> >> >> grid.clear(); >> > >> >> >> data = null; >> > >> >> >> proxy = null; >> > >> >> >> reader =null; >> > >> >> >> store = null; >> >> > >> >> >> } >> > >> >> >> } >> >> > >> >> >> }); >> >> > >> >> >> } >> >> > >> >> >> I've tried with FF and there's no problem...so it's an issue with >> > >> >> >> ie7. >> > >> >> >> Can you see some big error in the code i posted just above? thx >> > >> >> >> for >> > >> >> >> help! >> > >> >> >> Michela >> >> > >> >> >> On 24 Feb, 09:48, "alex.d" <[email protected]> wrote: >> >> > >> >> >> > Assuming adding/removing markers to/from the map is leakless >> > >> >> >> > (google >> > >> >> >> > probably knows how to do this ;-) we are left with gwt-ext >> > >> >> >> > grid. Every >> > >> >> >> > 10 sec you remove old rows and add new ones. So you have some >> > >> >> >> > DOM- >> > >> >> >> > Elements (a table row) that are removed/created every 10 >> > >> >> >> > seconds. >> > >> >> >> > Probably it's a grid's particular implementation that leaks. >> > >> >> >> > But most >> > >> >> >> > probably it's just IE that doesn't really remove garbage >> > >> >> >> > properly even >> > >> >> >> > when it can/should. So what can you do? >> > >> >> >> > 1. If it's grid that leaks: dump it - implement smth. yourself >> > >> >> >> > with >> > >> >> >> > vanilla GWT. >> > >> >> >> > 2. It it's IE: let's say the total ammount of markers is never >> > >> >> >> > bigger >> > >> >> >> > than 25 - you can create 25 rows in the table and instead of >> > >> >> >> > adding/ >> > >> >> >> > removing them you just change the text. This way you'll have >> > >> >> >> > slightly >> > >> >> >> > more memory allocated at the beginning but hopefully no leaks >> > >> >> >> > while >> > >> >> >> > running because no DOM-Elements are created/removed. >> >> > >> >> >> > hth >> >> > >> >> >> > On 24 Feb., 09:14, koalina <[email protected]> wrote: >> >> > >> >> >> > > Hi Jason, yes, reloading page cause memory usage fall out. >> > >> >> >> > > My app is quite simple: a gwt ext tab panel, the first tab >> > >> >> >> > > showing the >> > >> >> >> > > map widget, the second one a gwt ext grid with a few rows >> > >> >> >> > > (more or >> > >> >> >> > > less 10), each one with some information about the markers >> > >> >> >> > > showed. >> > >> >> >> > > I've three "thread", implemented as Timer, which refresh >> > >> >> >> > > positions of >> > >> >> >> > > markers, informations and last update time. Each thread make >> > >> >> >> > > a rpc >> > >> >> >> > > call and is always running, even when the tab of interest is >> > >> >> >> > > not >> > >> >> >> > > active.... >> > >> >> >> > > Do you see some critical issue in this >> >> ... >> >> leggi tutto > > > -- Eric Z. Ayers - GWT Team - Atlanta, GA USA http://code.google.com/webtoolkit/ --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
