Dalvik内存碎片处理

时间:2012-11-15 19:46:40

标签: android

请告诉我Dalvik内存碎片处理方式如何? 例如,如果我有一个app分配一些小内存。但释放其中一些,然后再尝试分配一大块。 Dalvik如何处理这样的请求,堆中的所有“漏洞”?

我需要帮助从logcat中理解这一点:

11-15 02:50:21.837 D/dalvikvm(  990): GC_BEFORE_OOM freed 16K, 40% free 9830K/16384K, paused 90ms, total 90ms
11-15 02:50:21.837 E/dalvikvm-heap(  990): Out of memory on a 5032864-byte allocation. 

它说我的应用程序使用了16384K中的9830K。我知道16M是最大堆大小,它不能再增长。

但这应该留下6554K免费(16384k - 9830K)。 为什么dalvik在5032864字节分配上说“内存不足”。那是4914K,比我离开时要小。

谢谢。

2 个答案:

答案 0 :(得分:-1)

看看这个,它可能会帮助你理解如何处理dalvik内存碎片

Link1

答案 1 :(得分:-2)

与大多数垃圾收集器(GC)的实现一样,Dalvik / Java的GC使用双引用:内存中的引用变量不直接指向它们的对象,而是指向最终指向单个对象的第二个引用。因此,当应用程序需要大量内存分配时,GC可以随意移动内存分配并将漏洞融合在一起,而不会以任何方式影响Java分配的各种引用变量。