本地引用和字段引用内存分配
一个对象可以包含对其他对象的引用。 如果将这些引用声明为类/字段变量,则由于对象本身是在堆上创建的,因此由字段引用表示的值将存储在堆中。
所以,如果我有
public class A {
int size;
}
2
那么它会作为堆中对象的一部分存储,但是引用即存储的名称大小在哪里? size == 2
? 名称“大小”存储在哪里?
该字段的名称存储在Class对象A.class
。 您可以使用java.lang.reflect
库检查类字段名称。
例如,要检查课程的所有字段,请执行以下操作:
for (Field field : A.class.getFields()) {
String fieldName = field.getName();
Class<?> fieldClass = field.getType();
// etc
}
名称“大小”是否也存储在堆中对象的内部?
不是。它存储在permgen
内存中
JVM如何在堆上交叉引用大小== 2?
它在编译时查找字段,其余的字节码发生
字段引用不会在主栈上创建?
没有。堆栈和堆栈有更多的内存区域,还有permgen,其中存储了类定义和类字段。 还有更多的内存区域,例如垃圾收集器。
链接地址: http://www.djcxy.com/p/82593.html上一篇: Local references and field references memory allocation