系统域(开发者无法操作)
共享域(开发者无法操作)
应用程序域(AppDomain的一个实例) 每个AppDomain有自己的加载堆
存在于每个程序域中,存放CLR的类型系统和用户自定义的类型对象,不同域的加载堆存放的对象不同。 AppDomain加载堆也存放静态对象,由于静态对象是全局的,不会成为垃圾,所以不受GC管辖。加载堆分为高频堆(32k),低频堆(8k)。比如值类型(或者引用类型)的静态变量就分配在加载堆上,所以值类型不一定分配在栈或托管堆上
垃圾收集器的处理对象。分为0,1,2代,代越高越大。2代中有个特殊部分 大对象堆(large object heap)
它存放超过85k大小的对象。 // 小对象堆(SOH)
同步块索引是类的标配,它位于类在堆上定义的开头-4(或-8 注释:32位 64位内存页大小) 至 0字节。 CLR管理一个同步块数组,共32、64多功能结构其中前6位提示访问者自身为0 , 1代表不同的功能, 比如线程同步,当对象被线程访问后会判断索引值是否为特殊值,如果否则不能操作这个实例,如果是则会在同步数组中分配一个同步块,并将此索引值写入实例的索引值。
方法表指针又称类型对象指针,类型对象由CLR在加载堆中创建,类型对象中存放了静态字段和方法表,所以反射获取到的类型就是它类型对象,并且指向同一个
消除排列顺序的不同带来的额外的内存页消耗
32位
bit
int
bit
这3个CLR会把它换成int bit bit
值类型一定是密封的
值类型不一定分配在栈上
装箱把值类型转为object或者实现的接口