Java 会分配什么样的内存?
What kind of memory will allocate in Java?
请有人用下面提到的场景消除我对 Java 内存管理的疑虑。
当我们为原始数据类型变量赋值时,该值将存储在堆栈内存中。如果我理解错误,请纠正我。
就像下面提到的分配非原始数据类型的值时内存的分配方式一样。
Integer a = 3;
将在堆栈或堆中创建内存?
变量 a
将位于堆内存或堆栈内存中,具体取决于变量的 种类 :
- 方法或构造函数局部变量(包括参数)- 在堆栈上
- 实例变量(又名属性或字段)- 在堆上
- class 变量 - 在堆上。
(为了完整起见,有几个模糊的情况,其中 lambda 或内部 class 指的是封闭范围中的有效最终局部变量。在这些情况下,a原始变量内容的副本将存储在堆上。)
表示 3
的装箱值的 Integer
对象将在堆上。
对该对象的引用的副本存储在 中 变量 a
中,无论它恰好在哪里。在 JVM 的其他地方可能还有该引用的其他副本。
请有人用下面提到的场景消除我对 Java 内存管理的疑虑。
当我们为原始数据类型变量赋值时,该值将存储在堆栈内存中。如果我理解错误,请纠正我。
就像下面提到的分配非原始数据类型的值时内存的分配方式一样。
Integer a = 3;
将在堆栈或堆中创建内存?
变量 a
将位于堆内存或堆栈内存中,具体取决于变量的 种类 :
- 方法或构造函数局部变量(包括参数)- 在堆栈上
- 实例变量(又名属性或字段)- 在堆上
- class 变量 - 在堆上。
(为了完整起见,有几个模糊的情况,其中 lambda 或内部 class 指的是封闭范围中的有效最终局部变量。在这些情况下,a原始变量内容的副本将存储在堆上。)
表示 3
的装箱值的 Integer
对象将在堆上。
对该对象的引用的副本存储在 中 变量 a
中,无论它恰好在哪里。在 JVM 的其他地方可能还有该引用的其他副本。