static 变量到底是由谁来创建的 ? 为什么通过类名就能引用,这里的类名扮演什么角色?(是一个指针吗),还有它是何时销毁的?谁来销毁的?

解决方案 »

  1.   

    static表示的是类型状态的一部分,而不是对象状态的一部分。CLR在第一次加载一个类型是,会在托管堆中创建一个类型对象表示某个类型,实例化某一个类型的对象会在对上分配内存给一个实例对象,实例对象包含三个部分:
    1、类型对象指针:指向类型对象;
    2、同步索引块;
    3、实例字段。
    而静态字段是保存在类型对象中的,所以用类名引用。当没有指针指向这个类型对象的时候,就说明托管堆中没有这个类型对象的时候,这个类型对象就会被当作垃圾回收。