If I can make one more suggestion.... since you mention bitmaps....

It might be useful to add explicit Java methods to clean up your objects that hold references to bitmaps, and call Bitmap.recycle(). This method immediately frees up the memory allocated to hold bitmap bits, leaving only the Java stub that's quite small, and can be dealt with by GC at a later time.

-- Kostya

18.10.2010 23:35, DanH пишет:
Kostya's link was a good one.

On Oct 18, 2:17 pm, John Gaby<jg...@gabysoft.com>  wrote:
It is funny that you mention images, because I am pretty sure that my
leak is associated with images not being freed.

Can you point me to a reference that discusses the heap dumping tools?

Thanks again

On Oct 18, 11:35 am, DanH<danhi...@ieee.org>  wrote:

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


--
Kostya Vasilyev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com

--
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