作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我知道 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/
我是一名优秀的程序员,十分优秀!