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

时间:2014-11-11 08:24:06

标签: java memory-management static final

我知道类的静态方法和非静态方法都存储在方法区域中。
但我真的怀疑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 :(得分:0)

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

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

答案 1 :(得分:-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
    在构造函数上创建
  1. final int。这意味着它与物体有关。
  2. static int是在静态{}上创建的。这意味着它与静态变量有关 静态变量等于方法区域的类变量。
  3. static final int位于常量池中,没有相关代码。它的意思是 它会在运行时引用。

Bytecode Analysis