【发布时间】:2012-11-01 14:08:16
【问题描述】:
这可能甚至不需要问,但我想确保我是对的。当你像这样在 Java 中创建任何对象的数组时:
Object[] objArr = new Object[10];
变量objArr位于栈内存中,它指向堆中数组对象所在的位置。堆中该数组的大小等于 12 字节对象头 + 4(或 8,取决于参考大小)字节 * 数组中的条目数。这准确吗?
那么,我的问题如下。由于上面的数组是空的,那么在执行那行代码后,它是否立即占用了堆中 12 + 4*10 = 52 字节的内存?还是 JVM 会等到您开始将东西放入数组中后再实例化它?数组中的空引用占用空间吗?
【问题讨论】:
-
只是给您一些术语,您实际上是在询问 Java 数组是否为“sparse arrays”
-
无论是指向null还是什么,reference就是reference,在这种情况下它恰好是
Object类型。但这是个好问题,+1。 -
哦,谢谢大家。我不确定这些知识是如何从我的裂缝中溜走的!