首页 文章

Java在哪里存储最终成员和静态成员?

提问于
浏览
4

我知道类的静态方法和非静态方法都存储在方法区域中 .
但我真的怀疑Java在哪里存储对象的最终变量(常量)成员和静态变量成员 .

例如,

class A{
     private final int a = 1;
     private static int b = 2;
     private static final int c = 3;
     //other codes...
}

我想知道Java在内存中存储a,b,c的位置 . 堆,堆栈或方法区域?

======更新=====
嘿,谢谢你的帮助 . 请允许我分享关于jvm组件的链接:http://www.artima.com/insidejvm/ed2/jvm2.html

2 回答

  • 0

    在Java虚拟机实例中,有关已加载类型的信息存储在称为 method area 的内存的逻辑区域中 . 类中声明的类(静态)变量的内存取自方法区域 .

    所有实例变量都将存储在 heap area 中,包括最终成员 .

  • -1

    在我的测试中,我有这个结论 .

    1. private final int a = 1; // heap with object
       2. private static int b = 2; // class variables of Method Area
       3. private static final int c = 3; // run-time constant pool of Method Area
    
    • final int在构造函数上创建 . 它意味着它与对象有关 .

    • static int在static {}上创建 . 它意味着它与静态变量静态变量相关,等于方法区域的类变量 .

    • static final int在常量池中,没有相关代码 . 这意味着它将在运行时被引用 .

    Bytecode Analysis

相关问题