2013-08-27 74 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