我知道 Android 平台中有 Dalvik(JVM) 堆和 native 堆。 而且 Dalvik GC 在 native 堆上没有工作。 但我不确定这是如何工作的,我的意思是 Android 操作系统如何将它们分开?
可能的情况1:由单独的内存硬件组成(我不太相信)
可能的情况 2:Android OS 的两个堆都有 FIXED 内存量
可能的情况3:Android OS必须在必要时分配一部分Dalvik内存堆变成native heap,所以native heap和Dalvik heap的大小是灵活的。
哪一个是真的,或者我没有提到的可能性?
最佳答案
native 堆由 dlmalloc() 管理,它使用 mmap() 和标准调用(如 sbrk())的组合来分配内存。托管(“Dalvik”)堆(大部分)是由 mmap() 分配的一大块。它全部运行在 Linux 内核之上,所以如果你了解 Linux 内存管理,那么你就已经知道低级部分是如何工作的。
您可以在 this post 中阅读有关 Dalvik 如何将空页面从托管堆返回到操作系统的更多信息。 .
编辑:有关 Android 内存管理信息的规范帖子是 this one .我不认为它直接回答了你的问题,但它有很多很好的信息和信息网站的链接。
关于安卓 NDK : Dalvik Heap and Native Heap - How Separate Between the two,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520110/