00:00
好,同学们,接下来给大家说一下对象头里面。它的两大部分构成元素MA2的对象标记和我们的内源信息类型指针分别是什么东西,又分别存储着什么样的内容那?先看他对象标记,马库尔德来吧,他保存这些什么呢?在说他之前啊,那么来回到我们这儿,弟兄们都清楚啊,我们这儿呢,16了个对象,那么这呢,不妨啊,把我们刚才之前的那个问题提出来,那么也就说我们六一个对象。占内存多少?好,这个问题还没有回答大家对吧?那么第二个我们来先看一下啊O点哈西扣的,我相信各位同学,我一运行这个程序,大家呢,没有任何问题,每个对象都会有个哈希码,比方说它尾号是0929,好,我们都知道这个对象它有一个哈希编码,那么我想请问。
01:00
这个对象。它呢是由三部分构成,对象头,实例数据和对齐天窗,那么请问既然这个对象能打得出它自身的哈希码是0929,尾号是这么一个,那么请问这个编码它记在什么地方?OK,那么下面我们来吧,继续啊,这个哈希。扣的记录在对象的。什么地方好?这是第一个问题,第二个synchized,哦,啊,假设我们都写过某一个对象,我们可以拿它来做SYNCH的这样的一个。对象锁吧。那么请问。他怎么知道我被锁了多少次啊,我到底有没有被加锁,哪些地方来标注来说明,好这是第二个问题,好第三个我们之前呢,都给大家呢介绍过啊。system.gc我相信这个呢,都明白对吧,是什么意思啊,手动。
02:03
触发或者是收集垃圾好。那下面我的问题是,假设我们要烧一个垃圾,那么这个时候有些垃圾会被收掉,有些垃圾是不会被收,比如说他还在用,那么他还在用的时候过程当中,那么这一次GC躲过了,这次GC镰刀我们是不是说过如果超过15次?可以从新生带到我们的养老区,只要有Java虚拟机相关知识背景同学都应该明白我现在在说这句话什么意思啊,比方说有些东西你不是随时在伊甸园区的,你活过很多次以后,认为你是长期使用的对象,不能收,那么这个时候到一定次数,你可以升到我们的养老区里面,那么我怎么知道你活过了多少次啊,躲过了几次GC的镰刀呢?那么等等,但是这一系列问题,那么通通回答给大家来。请大家看从上到下说过了一个对象,它有头实例数据对齐填充。
03:01
红色、绿色、黑色三部分构成,那么一个对象头,它有对象标记和内源信息两部分构成。那么刚才我的那三个提问,比如说这个对象哈,这个哈希玛保存在哪?GC的标记,GC的次数,同步所的标记,偏向所持有者等等,这些信息和内容通通保存在对象标记mark word这个里面。OK,也就是说,如果人家问你假设一个哈希玛放在什么店儿啊?放在对象的任何一个对象身上都有个哈希玛放什么店啊?好比你的钱包放哪啊?放我口袋里面那么一样,放在它这个哈希马呢,就放在对象头的对象标记mark word里面,所以说它的结构是这样,最重要的就是对象标记mark word。干些什么事涉及到哈西玛?GC相关的标记和回收次数,还有snchize同步锁的标记,这就是为什么我们要说对象头,因为后面讲所升级S的时候,必须牵扯到偏向锁、同步锁这些底层数字的变化和结构的变化,来保证你当前到底加的是一把什么锁,是偏向锁呢?是轻向锁呢?还是重量锁?所以说或port对象头马,那么到底。
04:17
更详细的存储的内容,他怎么知道有这些判断呢?那么来同学们,这张表一览无余。首先对象头叫马尔,也就叫对象标记,它标记和存储些什么呢?存这些东西,对象哈希玛。对象的分带年龄,它的标志位就是零一。假设我加了虚拟机。用任何一个对象的时候,检索了它的标志为零,一,我就知道这个就是一个普通的六对象,它没有加锁,那么第二个它指向所记录的指针,假设是零,零,那么这就是轻量级的所,俗称轻量所,那么如果是幺零,那么就是膨胀。重量级的锁定。那么什么是?
05:01
偏向所,轻向所,所膨胀或者叫重量所,我们后面下一章会给大家讲,但是在这儿大家可以看得出,如果你不明白什么叫对象头,Mark的这个对象标记,这些标志位分别存一些什么东东,后面跟你讲是讲不清楚的。所以说我们在这儿我们大概就明白了,原来GC的一些信息,哈希玛的存储同步组的标记全部是由这个对象头来通过这个对象的标记的标志位来进行状态的说明和种类的划分,告诉家va虚拟机我应该如何运行好。那接下来请大家看在64位系统当中,那么注意我们就不再多说32位了啊,理由是这样的啊,那只要你们公司正常一些啊。几位?64位听懂了吧?JAVA8应该生产上和各大公司用的都应该是64位,所以说我们本次讲解只说64位,当然32位也有啊,我们只说64啊,那么假设在64位系统当中。
06:03
Mark word占八个字节,类型指针占八个字节,那么一共是多少个字节?16个字节哎,也就是说如果说你有一个只有一个对象投的一个很小的对象,那么他溜出来这个对象就是16个字节,那么可以回答同学们前面这个问题。如果我们就是了一个object。他没有那些什么所谓的。实例数据的话,那么这个时候它就是16个字节,后面我们会给大家演示好,那么来同学们搁到这儿了以后我们继续。下面先来看看64位虚拟机下面,那么mawa的大小就是64位,它的结构如下,它的存储结构,那么上面是它的一些信息标志位的栏和条目,那么栏偏向锁,由于我们还没讲,我们就先讲五所么,前面我们说过了,比如说什么对象的哈希码呀,对象的分段年龄等等等等,这些东西我怎么知道用马word来表示和介绍呢?那么大家请看,假设这个对象是无所,其他的情况我们不讨论啊,我们先说未锁定一种状态,那么。
07:11
马库尔德。共计八个字节,一个字节是占八位,八八就是64位,那么就是64位,零一一零一来做标识假设。它是五所,那么前25位不用,中间这儿31位,大家请看存什么对象的哈希玛,也就是说我们之前说一个对象,它有一个哈西玛,从哪就存在它的对象头的马,Word这个里面占了31个坑,OK,那么假设你无所,你是不是偏向锁不是这块就是零,你的所标志位就是零一好,那么后面我们会讲。从五所到偏向所到轻量所到重量所,那么也就是按照它这些马克沃尔的标志位的变化,那么比如说001就是无锁,101就代表是偏向锁,那么这就是为什么我们在这要详细说对头,否则后面那个所升级根本没办法给大家讲清楚,OK,那么来搁到这儿。
08:09
我们呢,就可以获得默认存储对象哈西code呀,分带年龄啊,所标志啊,全部一股脑的存在,我们的对象标记马,Word,这这些信息都是与对象自身定义无关的数据啊,它不跟你人没关系,是系统Java这门原生语言带给你的,有这么个东西,他不用你什么定义一个比方说这个人的人名,这个人的身高,这个人的年龄,这个人的身份证号码,这些额外你自定义的附加信息没有,所以呢,马被设计成一个非固定的数据结构,以便在极小的空间内存储。尽量多的数据变化,那么大家都清楚啊,64个0101 64个坑位,001是五所,101是偏向数,那么这样是不是靠位数和坑位的信息的展现和变化,我们就可以获得不同的信息,我们就会明白这些什么哈希玛呀,对象分段,年龄等等等等,就看它标志位的变化,OK,哎,所以说这样的话,它会根据对象的状态复用自己的存储空间,坑还是这三个坑,001假设是什么?101假设什么111假设是什么,OK,那么这样的话就是有限的存储空间可以表达多种多元的信息,那么运行期间马尔的项标记存储的数据会随着所标志位的变化而变化,OK,所以我们的马二的。
09:26
对象所,它保存了什么,有哪些药,那么就是在这家给大家说。
我来说两句