[讨论] VM SPEC求解疑——class variable 与 instance variable区别?

beneo 2010-08-08
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html

A class variable is a field of a class type declared using the keyword static (§2.9.1) within a class declaration, or with or without the keyword static in an interface declaration. Class variables are created when the class or interface is loaded (§2.17.2) and are initialized on creation to default values (§2.5.1). The class variable effectively ceases to exist when its class or interface is unloaded (§2.17.8).

最开始我臆想,class variable就是存在perm区那个唯一的class,后来发现他说有关键字static或者interface,那这样我就有点糊涂了,难道
c
Class Demo {
    static A a = new A();
}

a才是class variable?我怎么看的象instance variable了

The class variable effectively ceases to exist when its class or interface is unloaded
明显再说Classloader了。。这个没啥问题。
mercyblitz 2010-08-08
new A(); 是在Java Heap中。

而a变量,不管是类的(static)或实例的(非static),这个标识(变量信息)属于类的信息,保存在永久区域(Perm),只是static初始化在类加载时,而实例的则是对象构造时,生命周期不同而已。
beneo 2010-08-08
mercyblitz 写道
new A(); 是在Java Heap中。

而a变量,不管是类的(static)或实例的(非static),这个标识(变量信息)属于类的信息,保存在永久区域(Perm),只是static初始化在类加载时,而实例的则是对象构造时,生命周期不同而已。


你没说清楚或者我没看懂。。。
mercyblitz 2010-08-08
beneo 写道
mercyblitz 写道
new A(); 是在Java Heap中。

而a变量,不管是类的(static)或实例的(非static),这个标识(变量信息)属于类的信息,保存在永久区域(Perm),只是static初始化在类加载时,而实例的则是对象构造时,生命周期不同而已。


你没说清楚或者我没看懂。。。


a变量属于Class的元信息,不论它有没有static修饰。
beneo 2010-08-08
可能我把Class object 和 Class variable 搞混了

mercyblitz 2010-08-08
beneo 写道
可能我把Class object 和 Class variable 搞混了



Class object也是对象,不过不在Heap中,而是在Perm 区域。当Class重新定义的时候,前一个版本会被GC掉。
taolei0628 2010-11-26
变量只是对对象实例的一个引用,而非对象本身。
Global site tag (gtag.js) - Google Analytics