请告诉我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,比我离开时要小。
谢谢。
答案 0 :(得分:-1)
看看这个,它可能会帮助你理解如何处理dalvik内存碎片
答案 1 :(得分:-2)
与大多数垃圾收集器(GC)的实现一样,Dalvik / Java的GC使用双引用:内存中的引用变量不直接指向它们的对象,而是指向最终指向单个对象的第二个引用。因此,当应用程序需要大量内存分配时,GC可以随意移动内存分配并将漏洞融合在一起,而不会以任何方式影响Java分配的各种引用变量。