MyClass mc = new MyClass(),的空间分配策略如下:
1. 计算空间看是否会导致GC。计算该类中定义的所有实例字段的size和两个附加对象(type handler(类对象的指针)和syncBlockIndex(指向一块用来管理对象同步的内存))的size并一直递归到object对象,得到其需要分配内存大小,看剩余内存是否够分配此对象,不够会导致垃圾回收。
2. 首先构造MyClass的type对象,type对象包括静态字段和方法表,将其分配在托管堆的loader堆上,注意此对象将不会被GC自动回收,其生命周期是从创建到AppDomain卸载。
3. 构造MyClass的实例字段,构造附加type handler并指向type对象,构造SyncBlockIndex并指向同步内存。
4. 调用MyClass构造函数,此时会引起其父类初始化,父类初始化循环上述过程,直至object对象完成创建,再返回执行子类构造函数直至MyClass,创建MyClass完成后,返回其内存地址,赋值给MyClass的this,并将其引用传给栈上声明的myClass。