你能告诉我Dalvik是如何处理内存碎片的吗?例如,如果我有一个应用程序分配了一些小内存。但是释放其中的一部分,然后尝试分配一大块。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,比我剩下的更小。
谢谢。
发布于 2012-11-16 03:53:18
看一下这个,它可能会帮助您理解如何处理dalvik内存碎片
Link1
发布于 2012-11-16 03:58:37
像大多数垃圾收集器( GC )实现一样,Dalvik/Java的GC使用双重引用:内存中的引用变量不直接指向它们的对象,而是指向最终指向各个对象的第二个引用。因此,当应用程序需要较大的内存分配时,GC可以自由移动内存分配,并将空洞融合在一起,而不会以任何方式影响Java分配的各种参考变量。
https://stackoverflow.com/questions/13404979
复制相似问题