jvm的类加载器在加载一个类的时候会维持这一个类在内存中的副本,也就是说,虽然没有实例化该类的对象,静态成员方法和静态成员变量已经在内存中存在.

解决方案 »

  1.   

    TO wingtrace:    不好意思,发帖后才看到你的第2个帖!
      

  2.   

    类应该是有同一属性和服务的对象的集合,而我们写的是这个集合的描述。
    觉得是JVM在遇到调用static类型的类成员时,如果该类未有实例,将会临时创建空间存放这类成员,而实例化是会为所有同类的对象创建公共空间存放这类成员。
      

  3.   

    你所说的类变量其实是一个引用,他在内存中已经有了一个4 byte的空间,里面的是空的,
    当你实例化一个类时,jvm会另外开一块内存装载类,这块内存的首地址就会放进刚才4byte的
    空间。class a{}
    class b{
    a ref;
    System.out.println(ref)
    }
      

  4.   

    JAVA作为一种跨平台的语言,管理内存的方式和其他的语言有所不同。
    首先,JVM作为一个进程加载到进程池
    其次, JVM将.class文件信息读入内存,并寻找程序的入口点, 将主线程加载到JVM所在的进程
    再次, 主线程启动其他的子线程所有动态分配的变量和对象(变量可视为一种对象)都将被分配他们的线程所管理, 因此可推测: 动态变量的分配是在宿主线程启动以后
    如果是静态变量, 那么, 将在加载.class文件是被初始化, 所以它不属于任何实例是由于管理它的并不是管理实例变量的宿主线程
      

  5.   

    看看Thinking in Java吧,没有发现讲这么深层次的好书。
      

  6.   

    静态变量(你说得类变量)和实例变量的储存区间是不一样的
    不过jvm采取了lazy loading的策略enjoy~~