我知道在Android平台上有Dalvik(JVM)堆和Native堆.Dalvik GC在本机堆上没有工作.但我不确定这是如何工作的,我的意思是Android操作系统是如何将它们分开的?
可能的情况1:由独立的内存硬件组成(我不相信太多)
可能的情况2:Android操作系统对两个堆都有固定的内存量
可能的情况3:Android OS必须在必要时将部分Dalvik内存堆分配为本机堆,因此本机堆和Dalvik堆的大小是灵活的.
哪一个是真的,或者我没有提到的可能性?
本机堆由托管dlmalloc()
,它使用组合mmap()
和标准调用sbrk()
来分配内存.托管("Dalvik")堆(大部分)是一个分配的大块mmap()
.它全部运行在Linux内核之上,所以如果您了解Linux内存管理,那么您已经知道了低级部件的工作原理.
您可以在本文中阅读有关Dalvik如何将空页从托管堆返回到操作系统的更多信息.
编辑:有关Android内存管理信息的规范帖子就是这个.我不认为它直接回答你的问题,但它有很多好的信息和信息网站的链接.