Actually, the cause of infinite gc was in my code. Mea culpa.
Regarding the X509 and HtmlParser object - the thing I would like to
understand is whether these are taking up space in my application's heap
or not.
Java MAT says they do (using an hprof dump created in DDMS).
Is this tool wrong? Are these objects perhaps allocated in memory pages
shared by all instances of Dalvik VM? I certainly hope so, but if anyone
can shed some light on this, it would be great.
-- Kostya
02.07.2010 19:26, social hub ?????:
>From what I have seen before
57 instances of
*"org.bouncycastle.jce.provider.X509CertificateObject"*, loaded by
*"<system class loader>"* occupy *268 096 (15,03%)* bytes. These
instances are referenced from one instance of
*"java.util.HashMap$HashMapEntry[]"*, loaded by *"<system class loader>"
I think these are from Android itself to validate the application and
resources during runtime. I may be mistaken.
If you create a simple app and run memory analyzer you will see these
things.
regarding the endless logcat stream of mem free I am not sure whats
happening.
if you are not getting OOM error then you should be doing a good job.
I have encountered one memory error which relates to handler in a
looping condition. During destroy the the handler has to be freed of
messages and set to null. I found this using MAT.
---
*
On Fri, Jul 2, 2010 at 10:00 AM, Kostya Vasilyev <[email protected]
<mailto:[email protected]>> wrote:
Hello,
I ran into what seems to be a memory management issue in my app.
After running for a while, dalvik gc is triggered, but never
finishes. I get an endless stream of these messages in logcat:
D/dalvikvm(24822): GC freed 22018 objects / 528920 bytes in 49ms
D/dalvikvm(24822): GC freed 22018 objects / 528920 bytes in 50ms
D/dalvikvm(24822): GC freed 22018 objects / 528920 bytes in 50ms
D/dalvikvm(24822): GC freed 22018 objects / 528920 bytes in 49ms
D/dalvikvm(24822): GC freed 22018 objects / 528920 bytes in 50ms
The application's normal execution obvoiusly stops, and never resumes.
This is the first issue - GC is quite normal, but it never
completing is not. For some reason, the Java VM tries to free the
same objects over and over again, but never actually frees them.
The second issue is that I used hprof and Java MAT to analyze
what's taking up memory space. The report listed three problems:
- 7 742 instances of *"java.lang.String"*, loaded by *"<system
class loader>"* occupy *473 856 (26,56%)* bytes
This is normal, created by my code. I certainly have work to do,
making my code more optimized. My code doesn't hold on to these
strings, so assuming issue #1 can be avoided, they should GC quite
nicely.
The other two entries are:
57 instances of
*"org.bouncycastle.jce.provider.X509CertificateObject"*, loaded by
*"<system class loader>"* occupy *268 096 (15,03%)* bytes. These
instances are referenced from one instance of
*"java.util.HashMap$HashMapEntry[]"*, loaded by *"<system class
loader>"
*
2 985 instances of *"java.lang.Class"*, loaded by *"<system class
loader>"* occupy *659 560 (36,97%)* bytes.
Biggest instances:
* class com.ibm.icu4jni.util.Resources$DefaultTimeZones @
0x40178af0 - 145 952 (8,18%) bytes.
* class android.text.Html$HtmlParser @ 0x4006fd18 - 126 592
(7,10%) bytes.
* class org.apache.harmony.security.fortress.Services @
0x400731b0 - 51 456 (2,88%) bytes.
* class android.content.res.Resources @ 0x4004e848 - 34 416
(1,93%) bytes.
* class android.text.AutoText @ 0x400f6260 - 28 776 (1,61%)
bytes.
My application does not use time zones (just whatever the default
one is implicit), HTML parsing, or X509 certificates. Why are they
combined taking almost a megabyte of memory? How can I avoid it?
My code certainly need to be more memory-optimized, but uses only
about half the amount of memory already allocated inside my app by
things I do not use.
I would be grateful for any suggestions.
--
Kostya Vasilev -- 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
[email protected]
<mailto:[email protected]>
To unsubscribe from this group, send email to
[email protected]
<mailto:android-developers%[email protected]>
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--
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
--
Kostya Vasilev -- 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 [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