对象可以包含对其他对象的引用。如果将这些引用声明为类/字段变量,则在堆上创建对象本身时,字段引用表示的值将存储在堆上。
所以,如果我有
public class A {
int size;
}
2
的int值,那么它将作为对象的一部分存储在堆上,但是引用的位置,即存储的名称大小?size == 2
? 答案 0 :(得分:1)
存储名称“大小”在哪里?
该字段的名称存储在Class对象A.class
中。您可以使用java.lang.reflect
库检查类字段名称。
例如,要检查类的所有字段,请执行以下操作:
for (Field field : A.class.getFields()) {
String fieldName = field.getName();
Class<?> fieldClass = field.getType();
// etc
}
名称“size”是否也存储在堆上的对象内?
没有。它存储在permgen
内存
JVM如何在堆上交叉引用size == 2?
它在编译时查找字段,其余部分在字节码
中查找不在主堆栈上创建字段引用吗?
没有。存储区域不仅仅是堆和堆栈,还有permgen,其中存储了类定义和类字段。还有更多的内存区域,例如垃圾收集器。