> What I really want > is a way to find out whether an object has been freed (or will be > freed) or not. I believe that I must have objects that are not being > freed, and I would like to try and identify them.
You can use WeakReferences for that. Create a WeakReference for the object. If the WeakReference "get" method returns null the object has been collected. (Or you can get fancy and use the ReferenceQueue feature.) On Oct 18, 11:40 am, John Gaby <[email protected]> wrote: > Thanks for the input. I am a little confused about your comment: > > 'The fact that you did not see the log from finalize() does not mean > it did not happen.' > > Are you saying that the finalize can be called and yet I may not get > the log? How is that possible? > > I added the call to super.finalize() as you suggested (it didn't > change anything), but please note that I really don't care about the > finalize being called, except as a debugging tool. What I really want > is a way to find out whether an object has been freed (or will be > freed) or not. I believe that I must have objects that are not being > freed, and I would like to try and identify them. > > Thanks > > On Oct 18, 9:26 am, Daniel Drozdzewski <[email protected]> > wrote: > > > On Mon, Oct 18, 2010 at 4:58 PM, John Gaby <[email protected]> wrote: > > > I appear to have a memory leak(s) in my application, and I am trying > > > to get a handle on it by trying to understand more about garbage > > > collection. I have created the following application. > > > > Here I have a class 'MyClass', and I create an instance of that class > > > in my 'onCreate'. I then null out the pointer which should leave no > > > references to that instance. > > > > In 'MyClass', I override the finalize method so that I can see when > > > the object is destroyed. When I run this program, the finalize method > > > is never called, even if I call System.gc(), from within my program, > > > or use the 'Cause GC' button using DDMS. (This is the same behavior > > > that I see in my full application, by the way). > > > > Can someone explain to me more about what is going on here. I believe > > > that in my main application, that I have objects that are not being > > > freed. Is there some strategy for identifying those objects? > > > > Thanks. > > > Ok, few things first: > > - Android does not reclaim the memory straight away even after the > > application gets closed. > > - System.gc() does not guarantee garbage collection in a timely manner. > > - When overriding finalize() you have to call super.finalize(). > > > The fact that you did not see the log from finalize() does not mean it > > did not happen. > > > Daniel -- You received this message because you are subscribed to the Google Groups "Android Developers" 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/android-developers?hl=en

