总之,在JDK7或更高版本中,静态域存储在定义类型的Class对象中,而Class对象与堆中的其他对象一样位于GC堆中。
再多说几句。 如果你相信所有的书,那总比没有书好。 标题的嫌疑我也有。 到底哪个不好,必须通过论据来证明。 也是各种文献发生矛盾的时候,我们在脑海中产生疑问的时候。 这时,拉了作者一把,“XX大神,你这个结论到底是怎么得出的? 最后,只能带着问题看代码。 愿pbdbb的——真相只有一个3354代码是真相的最好解释。
------------- -请参阅
附加地,在加载ClassLoader期间,在分析字节码流期间将创建与类元数据类型Klass对应的java镜像-Class对象。 创建Class对象函数Java _ lang _ Class 33603360 create _ mirror (在创建class对象时,会为用户定义的静态成员变量指定初始化值。 当然,这里的初始化只是根据相应的静态字段的类型提供适当的初始值,而不是用户实际提供值——。 除非用户为static field指定了初始值,或者用户指定了与默认值相同的初始值; 完成字节码流分析后,在类加载初始化阶段,如果用户为static field指定了默认值,则会调用特殊函数——,如clinit。 示例:
静态输入I=10;
编译为字节码时,将分析为以下格式:
#2=field ref #3. # 18//staticfieldtest.I : I
静态输入I;
静态{