它的等级次序对象指针指向自家

近年来在看书,看到了目标在内部存款和储蓄器中的存款和储蓄形式。

讲到了对象存款和储蓄在内部存款和储蓄器堆中,分配的空间除了品种对象的成员所需的内部存款和储蓄器量,还大概有额外的分子(类型对象指针、 同步块索引 ),看到那几个自身就有一点不懂了,不知情类型对象指针是何许,指向的什么?

从英特网找也未有找到,末了往下看,书中大抵描述。说下作者的明白:

品类对象指针:指向类型对象存款和储蓄的地址,假若有2个门类Person,它在堆中有壹块区域存款和储蓄它里面包车型大巴字段和分子以及多少个附加成员(类型对象指针、 同步块索引 ),类型对象的品类对象指针指向的是System.Type的地方。

因为Person类型在内部存储器中绝对于System.Type也是用作1个指标存在的,System.Type类型也是三个品种对象,它的体系对象指针指向本身;

实例化一个Person对象,Person p = new
Person(); p对象在内部存款和储蓄器堆中也分配一块区域存储它里面包车型大巴字段和分子以及五个附加成员(类型对象指针、 同步块索引 ),p的种类对象指针指向Person类型在堆中的地址。

 

同步块索引:先说一下联合实行块,.NET团队在统一计划基本框架时充足记挂了线程同步的标题,其结果正是.NET为每3个堆内对象都提供了支撑线程同步的功能,那正是共同机制的雏形【参谋:http://genwoxuedotnet.blog.51cto.com/1852748/504107

可是对各类堆内对象都分配同步块有二个比较大的弊端,便是这般增大了内部存款和储蓄器的损耗。在相似的系统中,须求共同机制支持的指标只怕只占少数,那样对于大诸多对象的话,二个联合块的内存消耗就全盘被荒废了。鉴于那或多或少,.NET框架选拔了一种折中的办法,正是实在只为每一个堆内对象分配二个齐声索引,该索引中只保留1个标识数组内索引的整数。.NET在加载时会新建多个1块块数组,当有个别对象须要被壹道时,.NET会为其分配1个联手块,并且把该联合块在同步块数组中的索引出席该对象的三头块索引中。

同步块机制包括如下的几点:
·
在.NET被加载时初步化同步块数组。
·
每2个被分配在堆上的靶子都会蕴藏四个附加的字段,个中2个积攒类型指针,而除此以外二个正是联合块索引,开始时被赋值为-一。
·
当3个线程试图利用该对象进入同步时,会检查该目的的一同索引。假诺索引为负数,则会在一道块数组中探究抑或新建多少个体协会同块,并且把四只块的索引值写入该对象的同步索引中。若是该指标的同步索引不为负值,则找到该目的的同步块并且检查是或不是有其它线程在选取该联合块,假使有则跻身等待情状,若是未有则表明使用该同步块。

同步块是指.NET维护的协同块数组中的有个别成分