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

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

所以,如果我有

public class A {
    int size;
}
  • 我知道,如果size的值为2那么它会作为堆中对象的一部分存储,但是引用即存储的名称大小在哪里?
  • 名称“大小”也存储在堆中对象的内部。
  • JVM如何在堆上交叉引用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

    下一篇: download rpivotTable ouput in shiny Dasboard