Dalvik 記憶體管理
by thinker
關鍵字:
最後更新時間: 2009-09-14 13:49:12 CST | 引用
查詢:
COMMENTS:
on 2010-09-07 14:57:22 CST
Lak said ..
你好,感謝你一系列有關Dalvik的文章,對我的幫助非常大。 我最近在研究Dalvik的heap allocation,但有一個部份我實在不太了解,希望能藉此向你請教一下。 主要我不理解的地方是,為什麼HeapSource為何需要管理多塊Heap? 一個VM只使用一塊Heap不是嗎?這部份我一直想不通,只能猜是和GC的運作有關,但目前還沒有研究到那一頭去。 另外一個則是為什麼createMspace需要給它startSize呢?假設他是設一塊memory space讓dlmalloc來使用,那設StartSize不就代表著就算我malloc的小於StartSize,我也最少會使用這麼大的空間? 以上是二個我看完code的小問題,我會持繼的看下去,但也希望假設您有時間了話,能夠撥空指點一下,感謝!
on 2010-09-07 17:02:25 CST
Thinker said ..
startSize 存在的目的是效能問題, 希望一開始就先配一定的量來使用, 才不需要不斷的為新的 request 去要新的記憶體. 這在一般的 desktop 上也是類似的設計, 減少配置的 overhead. 另外,多個 heap source 可能是為了支援 non-OS 或其它 embedded OS 的設計. 在許多裝置上, 記憶體的空間是不連續的, 我猜測 dalvik 可能有考慮在這類環境執行. 這在 FreeBSD/Linux kernel 裡, 也有類似的設計. 不過這是我依經驗所作的猜測.
on 2010-09-07 17:28:16 CST
Lak said ..
Wow!很感謝你的回應!看起來,Heap應該還是只會使用一份,不過實際上他在叫起一個activity的時後會呼叫dvmHeapSourceStartupAfterZygote(),所以還會長出新的Heap來,其實這部份我也還是很不懂(是因為要有自己的一份Heap嗎?),所以才會產生一大堆的疑問。看來真的要把它整個K完了,不然應該問號會越來越多。<br> 題外話,第一次認識您是經由Cookys那邊聽到的,但也沒什麼機會交流,沒想到卻因為Android的關係,正式的向您求教,也算是有緣呀!哈...
on 2010-10-17 15:41:54 CST
阿哲 said ..
你好: 最近在Trace Android上的GC,我想請教一下文章中提到的 "dvmHeapScanMarkedObjects() 是透過 dvmHeapBitmapWalkList() 進行第一輪掃描,針對 dvmHeapMarkRootSet() 已標記的 object 。dvmHeapBitmapWalkList() 會呼叫一個參數傳入的 callback, 將掃描新發現的 object 加入到一個 stack 裡。" 上面這段話中,從哪邊可以看出他經過第一次掃描後會將新發現的object加入到一個stack呢?? 謝謝。
on 2010-10-18 11:16:06 CST
Thinker said ..
你應該看 callback 的內容,加入 stack 是在 callback 裡做的。