【问题标题】:Class instance sizes in AndroidAndroid 中的类实例大小
【发布时间】:2010-08-09 16:51:42
【问题描述】:

我目前正在为 Android 实现一些图像处理代码。我知道内存限制并且很高兴在其中编写代码。但是,我找不到任何文档可以让我计算出我可能想要实例化的给定类的每个实例使用了多少字节(在堆上)。

我是一位经验丰富的 C++ 程序员,因此在为我的 C++ 代码解决此类结构/类大小问题方面相对胜任(考虑到处理器数据路径宽度、平台对齐问题等)。我知道 Java 通常处于更高的抽象级别,因此我可能无法保证通用 Java VM 的特定内存使用情况。然而,鉴于 android 在不同的 VM 上运行,并且鉴于开发人员受到强烈的内存限制:我假设可能存在一组相对确定性的规则来计算给定对象实例的大小,给定的知识成员。

有人知道这些规则吗?

谢谢!

亚历克斯

【问题讨论】:

    标签: android memory-leaks dalvik


    【解决方案1】:

    Dalvikvm 的内存开销与包括 HotSpot 在内的其他主流 32 位 VM 一致。

    dalvikvm 中每个对象的基本开销是两个 32 位字。为此,您为每个长字段或双字段添加两个单词,并且每个字段添加一个单词。静态字段不计入此总数。

    如果您通过调用未覆盖的 Object.hashCode() 或 System.identityHashCode() 来使用身份 hashCode,则可能会产生额外的开销。

    如果您在对象上进行同步,则会产生额外的内存开销。

    【讨论】:

    • 这正是我需要知道的。非常感谢。
    【解决方案2】:

    正如 Jesse 指出的那样,布局与 HotSpot VM 非常相似。 32 位热点的规则可以在这里找到: http://kohlerm.blogspot.com/2008/12/how-much-memory-is-used-by-my-java.html

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 2010-10-26
      • 2011-12-24
      • 2023-01-20
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多