作为学习的一部分,从下面的示例来看,
我的问题:
根据给定的数组声明/定义的内存布局,我想了解,哪个内存空间将成为堆栈空间和堆空间的一部分?准确地说,下面的内存空间(上图的一部分)位于哪里?
最佳答案
对象始终在堆上声明。只有对对象的引用通过方法变量和参数在堆栈上传递。
因此,上面绘制的对象图将存储在堆上,并且当且仅当它们具有指向上面的对象的参数或变量时,对这些对象的引用才会在方法调用期间存在于堆栈上图表。
JVM 优化可能会在幕后略有不同,例如使用寄存器而不是堆栈或内联对象,因为它可以证明永远不会逃脱方法调用等。但是这些优化可能会也可能不会发生,并且它们是从 Java 语言级别不可见。因此,上述 Java 语言规则成立,对象在堆上,方法参数/字段在堆栈上。参数和字段永远不能保存对象,只能保存对对象的引用。
关于java - Java中数组如何使用栈和堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970804/