本地引用和字段引用内存分配

时间:2012-07-27 00:48:12

标签: java

对象可以包含对其他对象的引用。如果将这些引用声明为类/字段变量,则在堆上创建对象本身时,字段引用表示的值将存储在堆上。

所以,如果我有

public class A {
    int size;
}
  • 我知道如果size获得2的int值,那么它将作为对象的一部分存储在堆上,但是引用的位置,即存储的名称大小?
  • 名称“size”是否也存储在堆上的对象内。
  • JVM如何在堆上交叉引用size == 2
  • 当你加载它在主线程中运行的类时,每个线程都有自己的堆栈。那么这些字段引用是不是在主堆栈上创建的正确吗?

1 个答案:

答案 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,其中存储了类定义和类字段。还有更多的内存区域,例如垃圾收集器。

相关问题