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

标签 java jvm heap-memory stack-memory

作为学习的一部分,从下面的示例来看,

enter image description here

我的问题:

根据给定的数组声明/定义的内存布局,我想了解,哪个内存空间将成为堆栈空间和堆空间的一部分?准确地说,下面的内存空间(上图的一部分)位于哪里?

enter image description here

最佳答案

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

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

JVM 优化可能会在幕后略有不同,例如使用寄存器而不是堆栈或内联对象,因为它可以证明永远不会逃脱方法调用等。但是这些优化可能会也可能不会发生,并且它们是从 Java 语言级别不可见。因此,上述 Java 语言规则成立,对象在堆上,方法参数/字段在堆栈上。参数和字段永远不能保存对象,只能保存对对象的引用。

关于java - Java中数组如何使用栈和堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970804/

相关文章:

java - 报告 JMH 基准测试的最大堆大小

java - JVM 如何判断堆栈条目是 int 还是 long

Java:JVM 可用的内核?

java - 如何测量 Java 中的峰值堆内存使用情况?

java - 使用 Apache Beam XmlIO 读取带有命名空间的 XML

java - 有没有一种轻量级的方法可以在Java 9+中添加安全点

c - 在 C 中运行时之前定义结构成员

java - Hibernate Envers 是如何工作的?

java - 如何在 Spring-MVC 中添加 "required"属性

java - 如何从 LCDUI 表单启动 LWUIT 表单?