java引用需要多少堆空间?

时间:2012-07-13 10:16:14

标签: java memory jvm

几乎所有平台的int都需要4个字节。 Java参考怎么样?

Map<String, String> m = null;

变量m占用32位/ 64位JVM的空间大小?

byte[] b = new byte[10];

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

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据给出的规范,对于引用变量的内存没有约束,它取决于JVM的开发人员,他们可能在32位计算机上使用32位,在64位计算机上使用32位或64位这一切都取决于jvm程序员