Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GWT Garbage Collection

I am creating a new presenter like so:

new MyPresenter(new MyView());

It registers some event handlers and binds to the view and such. Eventually, I might "close" that view so that it is no longer rendered by the browser. I am not maintaining a reference to this instance of MyPresenter anywhere.

In the Google forums on this topic, the conventional response is to "set your references to null" and then don't worry about it. Unlike in Javascript, I can't just say this = null; in Java for obvious reasons. But in Javascript, it's very easy to null out object references that I know will no longer be used.

My question: How can I tell if this presenter has been garbage collected since I don't maintain a reference to it? It very clearly exists. Should I have faith that GWT and JS will take care of this? Or do I need to maintain my own reference to MyPresenter so that I can manually null it when I'm done with it?

like image 432
Travis Webb Avatar asked Apr 23 '12 15:04

Travis Webb


1 Answers

There are two kinds of memory leaks:

  • DOM/browser level memory leaks
  • Application memory leaks.

DOM/browser level memory leaks typically last after you close the app. AFAIK only old browsers (IE6) are affected and that's the reason why GWT uses a special way to attach handlers.
This should be a non issue with modern browsers at least they will be a non-issue if you close the app. They can however become application memory leaks. (See here for more details). But in general modern Javascript GC are pretty good in freeing unused memory.

Application memory leaks might be an issue with long running applications and when you dynamically create a lot of views/presenters and keep reference via Eventhandlers. But here it really depends on the scope of the involved parties.
This post is a good reference with some more infos on that.

Finally to make sure that you really don't have any application memory leaks you should use the Dev Tools Heap Profiler to check the memory consumption over a longer period.
This blog post has some more infos on that.

like image 133
Ümit Avatar answered Oct 18 '22 19:10

Ümit