You probably do need one of the tools that dumps the heap and shows
you the classes of the objects found.

And do note that Android (outside of the pure Java issues) has
"issues" of its own with regard to image storage.  You can obey all of
the Java rules on clearing references and still get bit by Android
images.

On Oct 18, 12:41 pm, John Gaby <jg...@gabysoft.com> wrote:
> So there is no way to force all objects that no longer have references
> to them to be garbage collected?
>
> Once again, I really don't need to know when the object is actually
> freed.  What I am interested in is finding out whether it CAN be
> freed.  That is whether all the references to it are gone.  In my real
> application, the objects in questions are much larger and more
> complex.  Yet, I never see the finalize called for them.  This make me
> think that I still have references to them, but since I don't see the
> finalize called even in a simple case where I am sure there are no
> references, I cannot be sure.  I definitely have a leak, however,
> since if I perform the same operation enough times, the application
> eventually gets an Out Of Memory error.
>
> I am taking a look at using ReferenceQueue, or PhantomReference for
> that purpose but they seem to be way more complicated that I need.
>
> Thanks again.
>
> On Oct 18, 10:21 am, DanH <danhi...@ieee.org> wrote:
>
> > I doubt that adding content to the object would make it any more
> > likely to be collected.  The garbage collector doesn't generally
> > "weigh" objects as to whether they should be collected or not.  The
> > only differentiating factors are 1) the absolute size of the object
> > itself (not counting references to other objects), 2) the number of
> > times the object has "survived" garbage collection, and (sometimes) 3)
> > the class of the object.
>
> > On Oct 18, 11:57 am, Daniel Drozdzewski <daniel.drozdzew...@gmail.com>
> > wrote:
>
> > > On Mon, Oct 18, 2010 at 5:54 PM, Daniel Drozdzewski
>
> > > <daniel.drozdzew...@gmail.com> wrote:
> > > > On Mon, Oct 18, 2010 at 5:40 PM, John Gaby <jg...@gabysoft.com> 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.'
>
> > > > It is possible that the finalize() has been called at much later point.
> > > > I should have probably said that lack of finalize() does not mean that
> > > > the memory has not been regained.
>
> > > > As Dan points out, finalizers don't necessary run.
>
> > > > If Android decided to kill the process running finished application,
> > > > then it would simply do it on a system level, without trying to clean
> > > > the heap within that VM first.
>
> > > > If you want to see finalizers at work, allocate many objects that you
> > > > don't hold on to:
>
> > > >        for(int i=0; i<10000; i++ ) {
> > > >            MyClass x = new MyClass();
> > > >        }
>
> > > > ...and then call the following:
>
> > > >        System.runFinalization();
> > > >        System.gc();
>
> > > > You should see your log statements.
>
> > > btw, it would also help, if you made MyClass a bit "heavier" say by
> > > adding a member String and assigning to it some longish string literal
> > > in MyClass' constructor.
>
> > > --
> > > Daniel Drozdzewski

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to