![](/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.