【问题标题】:How many bytes a null object? [duplicate]一个空对象有多少字节? [复制]
【发布时间】:2015-05-12 21:06:35
【问题描述】:

当我们有一个引用变量时,例如为了简化它Integer i,我们可以假设i 的大小约为 16 字节开销 + 4 字节实际 int + 4 字节填充,即 24 字节。
所以我的问题是,如果i 为空,我们是否只有 4 个字节的引用没有指向任何地方,还是有任何其他额外的“隐藏”信息添加到这里?

【问题讨论】:

  • 你指的是对象还是引用?
  • 正确。我们只有 4 个字节的引用指向 null。

标签: java object memory byte


【解决方案1】:

如果我没记错的话,JVM 规范提到 null 不需要具有特定的值或表示,因此它可以是任何东西。 通常是什么,我不知道,但公平的猜测可能是 32 位或 64 位零,具体取决于 JVM 版本。

编辑:以下是相关部分:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.4

Java 虚拟机规范不要求对 null 进行具体值编码。

干杯,

【讨论】:

    【解决方案2】:

    是的,它仍然使用内存。我相信 32 位使用 4 个字节,64 位使用 8 个字节。

    找到更多信息:Java - Does null variable require space in memory

    【讨论】:

    • 如果您设置了对null 的引用,它并不指向堆上的对象(这会消耗堆内存)。然而,引用本身需要被存储。作为对象中的字段或本地堆栈帧中的插槽(如果它是局部变量)。这当然占用与“普通对象指针”大小一样多的字节(即 32 或 64 位)。在 Objects 中,字段可能有一些填充,而在堆栈上可能有一些重用(或者在递归的情况下,同一引用多次出现)。但这完全独立于引用的实际值(null 与否)。
    猜你喜欢
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多