Keith Wiley wrote:
> My app is building a relatively large structure ("large" being a term
> that is meaningless without context), and I am getting an
> OutOfMemoryError.  Problem is, I'm watching the memory using every
> metric I can think of, and I don't see how the error was triggered.
> It's obviously trying to allocate a 65kB HashSet in a rehash
> operation:
> 
> 06-06 17:59:11.234: ERROR/dalvikvm-heap(1884): Out of memory on a
> 65552-byte allocation.
> 
> Which makes sense; I traced it to the HashSet operation it is
> performing.  But this is what the memory looks at:
> 
> ActivityManager.Memory Info: availMem: 26300416B, 26300KB, 26MB
> ActivityManager.Memory Info: threshold/lowMemory: 16777216  false
> Runtime.freeMemory: 1828856B, 1829KB, 2MB
> Runtime.totalMemory: 15605728B, 15606KB, 16MB
> Debug memory allocated/native/default: 4452208  1032336  5484544
> 
> I don't get it.  Why won't it make a measly 65kB heap?  How can I
> detect memory problems given these utilities if they always return
> extremely large values right before and after an OutOfMemoryError?
> Are there yet additional memory utilities I should be using?

It may be a fragmentation issue. If I understand correctly, if you do
lots and lots of reallocations, while you may have tons of memory free,
there may not be a 65552-byte buffer free.

Can you pre-allocate your HashSet to a nice large capacity up front, to
avoid the reallocations?

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com | http://twitter.com/commonsguy

Need Android talent? Ask on HADO! http://wiki.andmob.org/hado

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

Reply via email to