Right way to dispose frame/components/containers?
My application creates a lot of frames with lots of containers and components (heavyweights as well as light weights) inside them. I have obeserved that none of the frames/containers/components get finalized unless I do a remove/removeAll() over the respective container. Currently I just make a call to frame.dispose() to dispose it off and assume that all components would be reclaimed by the garbage collector at some point of time. Is that the right way to dispose off the frames and mark all its child components for garbage collection? Or is an explicit call to removeAll() required to release the memory. I am aware that garbage collection doesn't happen immediately and may take a while before the GC collects objects. I have run the application continuously for couple of hours and created/disposed a lot of frames during that period. GC recollected none of them (none of the components either) except for those that were removed by an explicit call to remove or removeAll during the lifetime of the session. I even hit OOM errors but none of the components were recollected.
What could be the problem?
Some additional information:
I overridden removeNotify() and finalize() methods to see what's going on. For all components removeNotify() was called (even if I don't do explicit remove/removeAll and just dispose off the frame) but finalize never gets called. My methods:
public void removeNotify()
System.out.println("Remove notify called "+compId);
protected void finalize() throws Throwable
System.out.println("Finalized component "+compId);
}Thanks in advance.
Edited by: crack_it on Jul 31, 2009 8:52 AM
Sorry to bother guys. The problem was not with AWT but with one evil component that was displayed inside most of my Frame classes and was also registered as an Observer with an Observable class. The event at which the component was supposed to unregister itself with Observable never got fired and this one reference prevented garbage collection of entire gui brigade. Damn! Tiny monster.
Anyway the issue stands resolved. Thanks for your time.