【问题标题】:How much heap space does a java reference take?java 引用占用多少堆空间?
【发布时间】:2012-07-13 10:16:13
【问题描述】:

对于几乎所有平台,一个 int 占用 4 个字节。 Java参考怎么样?

Map<String, String> m = null;

变量m对于32bit/64bit JVM占用多少空间?

byte[] b = new byte[10];

上面的字节数组占用了 10 个字节,但是对 b 的引用又占用了多少额外的空间呢? 我认为 b 至少包括一个地址和一个长度,有人可以给我详细信息吗?

【问题讨论】:

  • 如果引用不在堆中,则占用零堆空间。

标签: java memory jvm


【解决方案1】:

对象中的引用在大多数 JVM(无论是 32 位还是 64 位)上使用 4 个字节,因为最近的 64 位 JVM 使用 Compressed Oops 以获得高达 32 GB 的堆在某些 64 位 JVM 上需要 8 个字节字节。

但是,堆栈上的大小通常不计算在内,只有堆大小很重要,在这种情况下,它不占用堆上的大小。

byte[10] 实际上使用了大约 24 个字节,因为它包含 8-12 个字节的标头,并且在 8 字节边界上分配了一个对象。

【讨论】:

    【解决方案2】:

    从字面上看,在大多数 JVM 上,32 位 JVM 上的所有引用占用 4 个字节,一个 64 位 JVM,一个引用占用 8 个字节。

    【讨论】:

    • 如果您的 JVM 使用 Compressed Oops,您的引用将是 64 位 JVM 上的 32 位。这是最近 JVM 的默认设置。
    【解决方案3】:

    根据给定的规范,参考变量的内存没有限制,这取决于 J.V.M 的开发人员,他们可以在 32 位计算机上使用 32 位,在 64 位计算机上使用 32 位或 64 位,这完全取决于jvm程序员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多