数组如何在Java中使用堆栈和堆空间?

时间:2014-09-22 09:33:14

标签: java jvm stack heap

作为学习的一部分,从下面的例子中,

enter image description here

我的问题:

在给出数组声明/定义的内存布局时,我想了解一下,哪个内存空间将成为Stack space&的一部分。堆空间?确切地说,下面的存储空间(上图中的一部分)位于何处?

enter image description here

2 个答案:

答案 0 :(得分:2)

始终在堆上声明对象。只有对象的引用通过方法变量和参数在堆栈中过去。

因此,您在上面绘制的对象图将存储在堆上,并且这些对象的引用只会在方法调用期间存在于堆栈中,当且仅当它们具有指向上述对象的参数或变量时图。

JVM优化可能会略有不同,例如使用寄存器而不是堆栈或内联对象,因为它可以显示为永远不会转义方法调用等。但是这些优化可能会也可能不会发生,并且它们是从Java语言级别看不到。因此,Java语言的上述规则包含堆上的对象和堆栈上的方法参数/字段。参数和字段永远不能保存对象,只能引用对象。

答案 1 :(得分:0)

THUMB-RULE - 所有对象都在堆上创建,而不管它们在何处被实例化。