00:00
各位同学大家好,接下来继续给大家介绍对象在堆内存中的存储布局相关更深入和更细节的知识。那么通过上面的讲解我们应该明白了,以前我们大家都清楚,一般我们另一个对象的话,它呢是在堆里面,那么第一次啊,我们解决了where地点地址这个问题,那么下面更进一步啊,我们知道它在堆里面呢,甚至是在堆里面的新新生区的伊甸园区里面,那么好,这个在伊甸园区里面,这个对象它由什么部分组成呢?组成部分和结构有哪一些呢?类似于我们的一个人体,从头到脚分别由三部分构成,那么好,总体而言,它的介绍是这样的。从上到下由对象头、实例数据和对齐填充共计三部分组成,那么相当于我们一个人,这是头,这是身子,这是穿着鞋的脚,OK,站立起来乘一个人,三者拼起来是一个对象实例的组成。那么好,这是总体介绍,那么接下来总分总,那么我们就来看看分。
01:07
对象头实例数据对齐填充,这三者分别又是什么呢?那么所以说我们这先继续来。先打开,我们发现原来对象头又有两部分构成,分别叫对象标记mark word,第二个叫类圆信息,又叫类型指针,那什么意思呢?那么同请同学们啊,拿下有点类似于这样啊,这不是有个对象头吗?那么这个对象头又有两部分构成,第一部分这个对象头叫对象标记mark word OK,第二部分,那么这个对象头它又承载着的信息呢?又叫内源信息。也叫。类型指针,OK,那么这两块又存在我们的对象头里面啊,好比说新生代里面又存有伊甸园区幸存者邻区幸存者一区,那么现在以此类推的学习。
02:05
对象头有两部分构成,分别叫对象标记mark和内源信息,也叫类型指针,OK,其他没有什么变化,好,那么这个是我们的第一个知识点,那么接下来我们呢,了解清楚以后,我们呢,走分走来给大家进行相关深度的讲解开工。大家请看Java对象,这是个什么?数组对象,那么按照我们之前铺垫的基础知识都会清楚任何一个Java object,那么当然数组也是object的一种,那么从上到下分别由对象头,对象中的实际数据和对齐填充三部分构成,那么Java对象和数组几乎是一致啊,唯一区别就是数组对象的话呢,比。普通的对象的对象头多了一个数组的什么长度,所以说搁到这儿,我们和我们刚才所写的这个是一样的,从上到下对象头实例数据对齐填充,那么对象头对象标记和内源信息,那么来大家看是不是这么一回事,好,我先实现一些遮盖啊,由于数组和Java对象都差不多,我们讲通一个就可以来同学们对比看一眼。
03:18
所以说呢,得到从上到下一个对象三部分对象头实际数据对齐填充,而对象头又有两份构成mark的对象标记和class point,俗称类型指针。好了,那么各位同学,我们接下来呢,继续。对象内部有这三部分,那么好。我们逐个挨个的展开,但是在这儿先说一下对齐填充,这个叫什么?保证八字节的倍数,那意思就是说。每八位字节,每八个字节作为一个相当于是一个计数的单元,OK,比如说啊,你列了个对象,假设这个对象六出来以后大概是。呃,11自己OK,那么11:8肯定是要大,但是又不够一个八的整数倍,那么就是二八一十六,它会给你对齐填充到16这样一个字节,好比哈,大家都清楚,比如说我们的这个,呃,解放军三军仪仗队,那么每个人的个子。
04:20
横看左看右看,上看下看都是一条线,那永远是呈一个排便,很整洁很V5,为什么身高都一样,但是呢,平均身高都是一米八五,那比方说啊,有些战士呢,他可能身高实际身高裸高是一米八四,就差这么一点点,那这个时候。你会怎么办?是不是一定会有垫齐对齐填充?比如说往鞋子里面再多放后一层鞋垫,那么只要你最后穿上鞋以后能够对齐填充达到达到整体的高度,在Java基础上就要保证八的自己的倍锁,那么在我们的实际过程当中,身高到一米八五,那么这样是不是就起到了对齐填充的效果,保证好计素看起来很爽啊,OK,好,那么这是第一个知识点,第二个请看。
05:09
对象头呢,又分为对象标记。Mark op op和源信息k op,诶,怎么这两个跟上面写的不一样,注意我们在Java里面叫mark class point。对象标记和类型指针,但是到我们open gdk底层的源码,它会有马oop和kla oop,那么这我要把它先写成这样,到时候两者其实都是一回事。好,那么内源信息存储的就是指向该对象内源信息k last首地址,那这是什么意思呢?可以先提前剧透,说难听点,你怎么知道这个对象是个object?那么来这个就是我们的类型指针,好,它指着我们存在方法区里面的这一套马甲。好,那么多的,我们后续展开,那么来同学们,我们接下来需要明白了,它这个对象头是由对象标记和内源信息它们两个组成,那么它们两个又是什么东东呢?我们注意对象布局里面最重要的就是这个对象头,好,那么下一讲给大家深度讲解。
我来说两句