Java 会分配什么样的内存?

What kind of memory will allocate in Java?

请有人用下面提到的场景消除我对 Java 内存管理的疑虑。

当我们为原始数据类型变量赋值时,该值将存储在堆栈内存中。如果我理解错误,请纠正我。

就像下面提到的分配非原始数据类型的值时内存的分配方式一样。

Integer a = 3;

将在堆栈或堆中创建内存?

变量 a 将位于堆内存或堆栈内存中,具体取决于变量的 种类 :

  • 方法或构造函数局部变量(包括参数)- 在堆栈上
  • 实例变量(又名属性或字段)- 在堆上
  • class 变量 - 在堆上。

(为了完整起见,有几个模糊的情况,其中 lambda 或内部 class 指的是封闭范围中的有效最终局部变量。在这些情况下,a原始变量内容的副本将存储在堆上。)

表示 3 的装箱值的 Integer 对象将在堆上。

对该对象的引用的副本存储在 变量 a 中,无论它恰好在哪里。在 JVM 的其他地方可能还有该引用的其他副本。