Java- 变量名或标识符存储在哪里,栈中还是堆中?

3

在Java中,标识符或变量名称存储在哪里?我了解对象存储在堆中,变量根据类型和范围存储在堆或栈中。我们可以调试或编写任何程序来确认吗?

谢谢&问候

3个回答

4
字段的名称作为类元数据的一部分存储在以前的PermGen现在的Metaspace中。 数组元素没有名称,只有数字。 (请参考Patrick McGoohan。) 方法和构造函数参数、局部变量和处理程序参数的名称仅在选择了该选项的情况下存储在类文件中的调试符号信息中。它们不被JVM所需,因为编译器已将它们映射到字节码中使用的堆栈帧插槽编号。

2
变量名称存储在“方法区”中(这是永久代的一部分),以及其他类元数据。
有一个特殊的区域来保存类元数据,称为方法区。这是 permgen(在Java8之前在堆中)的一部分,现在已经移动到 metaspace。

1
你是说类元数据和变量名会被存储在堆中? - Jeet
更新了我的回答。@JeetendraChoudhary - TheLostMind
谢谢,那么这个元空间在哪里呢,只是好奇。这个有什么影响吗?也就是说,它对开发人员有用还是只是了解一下的好事情。 - Jeet
@JeetendraChoudhary - Permgen数据已经移动到本地内存空间,这与您的堆空间不同。 - TheLostMind

0
变量名存储在永久代的方法区中。对象始终存储在堆中,但对象引用存储在栈中。

2
我认为OP在这里询问的是“字段名称”,而不是字段数据。 - TheLostMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接