2013-08-27 164 views
2

DDMS顯示VM Heap選項卡中對象(即空對象)的最小大小爲16個字節。但是struct Object在dalvik源代碼vm/oo/Object.h中只有8個字節。爲什麼有差異?這與對齊問題有什麼關係?Android/Dalvik中最小的對象大小

+0

我會認爲有一個8字節的分配housekeeping.In事物的達爾維克堆不只是佔用他們的實際領域的內存。不可避免的是,他們還需要一些「內務」信息,例如記錄對象的類,ID和狀態標誌,例如對象當前是否可到達,當前同步鎖定等。 – Slartibartfast

+1

Romain Guy和Chet Haase的更多答案https:/ /speakerdeck.com/romainguy/android-memories –

回答

4

簡短回答:任何對象(類指針+鎖定字)的8字節開銷,以及基礎的基於dlmalloc的堆分配機制的4或8字節開銷。所有對象都以8字節的邊界對齊,所以12字節的對象將有4個字節的填充。

Longer answer

+0

我認爲dlmalloc對每個分配的內存有一定的開銷。但是DDMS在報告內存使用情況時如何考慮這一點?我想這個計算應該在Dalvik裏面完成,但我還沒有找到確切的源代碼。 – Cyker

+0

'dalvik/docs/debugmon.html'(http://milk.com/kodebase/dalvik-docs-mirror/docs/debugmon.html)描述協議 - 查找HPSG塊。 'dalvik/vm/alloc/DdmHeap.cpp'生成數據;它計算一個對象的大小,然後在所有內容中加上HEAP_SOURCE_CHUNK_OVERHEAD(4個字節)。這對於所有對象都是不正確的,但它是一個合理的近似值。 – fadden