2

你能告诉我 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,比我留下的要小。

谢谢你。

4

2 回答 2

-1

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

链接1

于 2012-11-15T19:53:17.850 回答
-2

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

于 2012-11-15T19:58:37.097 回答