![](/img/trans.png)
[英]what is the difference between dalvik heap and native heap in android? which one is fixed.?
[英]Android NDK: Dalvik Heap and Native Heap - How Separate Between the two
我知道在Android平台上有Dalvik(JVM)堆和Native堆。 Dalvik GC在本机堆上没有工作。 但我不确定这是如何工作的,我的意思是Android操作系统是如何将它们分开的?
可能的情况1:由独立的内存硬件组成(我不相信太多)
可能的情况2:Android操作系统对两个堆都有固定的内存量
可能的情况3:Android OS必须在必要时将部分Dalvik内存堆分配为本机堆,因此本机堆和Dalvik堆的大小是灵活的。
哪一个是真的,或者我没有提到的可能性?
这几乎是你的第二种情况
有两个单独的heaps
,一个用于runtime
Art
(以前是DalvikVM
),另一个用于本native
程序。
您可以通过在proc
文件系统的maps
伪文件上执行cat
来轻松查看这两个不同的区域。
考虑以下输出:
2a028000-2a029000 rw-p 00000000 00:00 0 [heap]
b6400000-b6c00000 rw-p 00000000 00:00 0 [anon:libc_malloc]
在上面的例子中,第一个区域只有1页长,它由ART Runtime
管理。 支持dlmalloc
和rosalloc
,但ART
使用rosalloc
因为它更快。 与@fadden所说的(至少对于Lollipop)相比,这个区域由sbrk
管理。 它upwards
。
第二个区域,即2048
页长,它是本native heap
。 它由bionic
库使用,它是Android的libc
实现。 dlmalloc
和jemalloc
都受支持,正在使用的那个取决于设备。 我还没有找到扩展这个堆的调用,但我想mmap
就足够了。 它downwards
runtime
,朝向runtime
堆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.