00:00
各位同学大家好,接下来为大家介绍对象头的第二部分类源信息,又称为类型指针。好,那么打开我们这个对象头,对象的内存布局,从上到下对象头实例数据和对齐填充。那么对象头两部分构成上mark word,俗称对象标记。上一讲我们详细讲过,那么我们的哈希、玛雅所状态啊,都由它来标记、变更、保存和修改。那么这一讲我们就要给大家说一下class point类型指针,一句话,它就是我们每次new对象出来的。统一的多个实例对象的那个模板讲完了,好,那么来同学们不妨呢?在打开内源信息的脑图理论知识学习之前,我们先来看这么一个案例,我相信大家都清楚啊,假设现在class。Customer,我这儿呢,定义这个类,同学们,我在定义这个类的时候大家都清楚啊,CE,那么这个就是我们的这个模板,CE就是在账里面的引用等号,右边这个整体就是在堆里面的一个实例对象,没问题吧,好,那么来同学们。
01:14
这我们先说一下假设啊,我特ID,那么假设这个叫customer。Name,我相信这两行代码同学们都不陌生,那这个时候我们来看一下,结合我们的大纲,我们来说一下所谓的对象头,它里面的内源信息跟我们刚才所写的这一行有哪些区别,听着所谓的内源信息就是这个模板,就是它来。我们取资料来自于我的同事宋文康老师。他在GPM对。我们的模板堆栈做一个详细的一个架构图,大家请看。假设我们是没方法,我们这左边我们都清楚这它有哪一些局部变量,假设啊,我在这没方法呢,有customer这么一个引用,相当于我这的C,那么我左边的这个引用是不是要指向右边的这个六出来的整体的实例对象来,同学们new customer实例对象在什么地方堆空间?听好任何一个对象我们强调过了,一个是where,它在哪,另外一个是what,它有哪些内容组成?Where在哪空间哪些组成?任何一个实例对象从上到下三个篮框框,那么分别是对象头实例数据和什么对齐填充,那么大家请看。
02:35
这个时候运行时的这个元素句就是刚才我们所说的马word来有那些哈希值啊,GC分带啊,所的状态标识,那下面这个就是我们现在要讲的类型指针,它也是对象头的一部分。好,那么何为类型指针?请看指向方法区的什么class customer的K类源信息也记这个类型指针。就是我们现在所碰到的最左边这个模板,那么假设我现在C1 C2 C3,各位亲都清楚三个不同的customer对象实例,但是却均来自于同一份模板,没问题吧?所以在这这个类型指针就是指向方法区里面的这个内源信息k point来告诉你这个东东来自于哪。
03:24
OK,好,其他的什么所谓的实例数据和对齐填充,我们后面会详细的说明在这儿,请大家听一为就OK。假如说。我现在自定义了卡,这个就是说明什么。只有。一个对象头的实例对象,OK,这这么说没问题吧,那么相当于说他现在这样的一个对象,那么你可以把它理解为只有一个头,没有身子,所谓的身子就是后面这些实例数据,那假设我在这个里面又定义了这么一些东西,有一个ID,有一个customer name,结合这张图啊,相当于说什么我不但有一个对象头customer哈,因为每一个对象都有一个头嘛,这个躲不掉的。
04:13
然后在这个肚子里面还挂着什么我们对应的实例数据,OK,那么相当于是这些甚至什么就是它的一个组成部分,那么如果没有这个,你可以理解为就是一个只有对象头的实际对象。OK,如果加上这部分了,那么就是不但有对象头,还挂了一些实例上面的填充数据O了,那么就这么一点,后面我们会说实例数据啊,用代码会给大家证明,那么对齐填充,那么前面说过了,不够八位,以八的倍数倍补齐,好这串讲了一下实例和填充,重要的回到我们这儿,你就记住一个知识点,类型指针是对象头的一部分,它主要是指向方法区的,干嘛这一个。模板马甲OK,好,那么这个就是我们的类型指针说穿了。
05:06
对象会指向它的类元数据的指针,这方法区那个虚拟机通过这个指针来确定这个对象是哪个类的实例,那么我们这是3C1 C2 C3是三个不同的实例对象,但是却均来自于同一套衣服,同一个模板,同一套马甲,OK,那么这个就是我们这儿所要给大家所说的k point类型指针,保证它来自于同一个实例,同一个是吗?是哪个类的实例来自于同一个模板,好,那么最后我们来获得。假如说啊,你扭任何一个对象扭出来都有,都会有对象头,这个躲不掉,假设就是非常纯粹的一个对象啊。没有,它只有这么一个对象,类似于我们的object,那么这个时候提前说白了,它这个时候组成部分就只有。对象头和类型指针,那么按照刚才我们所说的64位里面。
06:03
任何一个对象头由mark word和类型指针构成,各占八字节,共计16字节。OK,好,那么同学们,这个就是我们对象头。最重要的两个组成部分,以及它们的作用和功能。
我来说两句