【问题标题】:Smallest object size in Android/DalvikAndroid/Dalvik 中最小的对象大小
【发布时间】:2013-08-30 01:12:06
【问题描述】:

DDMS 在 VM Heap 选项卡中显示对象(即空对象)的最小大小为 16 字节。但是struct Object在dalvik源代码vm/oo/Object.h中只有8个字节。为什么有区别?这与对齐问题有什么关系?

【问题讨论】:

  • 我认为有一个 8 字节的分配用于管家。dalvik 堆上的对象实例不只是为它们的实际字段占用内存。不可避免地,它们还需要一些“管理”信息,例如记录对象的类、ID 和状态标志,例如对象当前是否可访问、当前是否已同步锁定等。
  • Romain Guy 和 Chet Haase 的更多回答 speakerdeck.com/romainguy/android-memories

标签: android dalvik


【解决方案1】:

简短回答:任何对象(类指针 + 锁定字)的 8 字节开销,加上基于 dlmalloc 的底层堆分配机制的 4 或 8 字节开销。所有对象都在 8 字节边界上对齐,因此 12 字节对象将有 4 个字节的填充。

Longer answer.

【讨论】:

  • 我认为 dlmalloc 对每个分配的内存都有一些开销。但是 DDMS 在报告内存使用情况时如何考虑到这一点?我想计算应该在 Dalvik 内部完成,但我还没有找到确切的源代码。
  • dalvik/docs/debugmon.html (milk.com/kodebase/dalvik-docs-mirror/docs/debugmon.html) 描述了协议——查找 HPSG 块。 dalvik/vm/alloc/DdmHeap.cpp 生成数据;它计算对象的大小,然后将HEAP_SOURCE_CHUNK_OVERHEAD(4 个字节)添加到所有内容中。这并非对所有对象都正确,但可以作为一个合理的近似值。
猜你喜欢
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
相关资源
最近更新 更多