00:00
各位同学大家好,我们继续接下来给大家再说一下对象头MARK2。之前给大家粗略的介绍过64位系统里面各占多少位,一共16字节,那么当时给大家看了一下mawa的存储结构,那么接下来结合我们的虚拟机的位数32和64,以及我们C语言底层的源代码open jdk,再给大家说一下ma word。来。首先两套,32和64。32位虚拟机也是存在过的,但是现在啊,你如果去网络,网络上去看,千万不要再看32位的了,没有任何意义,所有系统都向64位靠拢,OK,那么所以说我们这儿打开一下我们的64位虚拟机,在看这个之前,我们先来看一下我们之前讲过的,都晓得组成是由三部分,对象头等等,那么存哪些东西在这左边是图,右边是官网,那么。有两个词构成,分别是。对象头和point类型指针,那么在这儿蓝色,这也可以说的很清楚。
01:06
这个对象标记存储了对象的是吗?布局啊,类型啊,GC的状态,C同步组的状态,以及我们的标识还什么,那么它是怎么做到的?在64位里面来最重要的承前启后,因为我们学对象头主要是给大家说syize,毕竟我们这门课是GC Java多线程高并发的技术,不是虚拟机的技术。但是。两者相关,所以下一章我们会说无所偏向所,轻量所,重量所这四所,那么其实底子啊,就是对对象,它里面这个对象标记以及相关状态的转换和记录,那么64位,那零一零一零一零一六十四个,那么各种组合就可以看出它到底有无加锁,加的是什么锁,以及对应的GC标志,那么。0015所101偏向锁,零零轻量锁幺零重量锁,OK,那么这个是有讲究的,好,所以说这个呢,是我们64位虚拟机,请同学们混个眼熟,后面还会看到,那么。
02:12
接下来我们就来看一下任何一个对象。我们前面说过了,Op。面向对象的一种定义,带着两个东西,任何一个对象出来都会披上这套马甲,都会有什么标准化的组件啊,一出场就会带着mark op的下划线,Mark word对象标记和k point OK,这个呢,前面都说过,那么它这定义了以后干嘛呢?是给这个用对象标记的这个描述来打开它,我们会看到在这块我们呢,给刚才给大家说了,就是64位的这张图,对吧?那么所谓的什么无所偏锁哪来的?全是源代码里面总结出来的,那么来我们来看一下底层源码,结合我们刚才所说的啊,来吧。这张图给大家抓了一下,那么来避免上下切换。
03:04
标记的op op的这个定义,它呢,包含了前面这个啊,大家请看。这个是不是32位,这个是不是64位好,那么在这一块以后有些什么哈希啊,还有什么洛克呀等等等等是些什么呢?来吧,结合我们前面的图搁到这儿,请大家先搂一下这个,那么这个所谓的什么?哈希就代表保存对象的哈希玛,OK吧,那么来同学们,我们搁到这儿了以后啊,我们在这个下面会看到什么,还有什么age级等等等等啊,这些我们先混个眼熟,那分别是保存对象的分带年龄,也就是我们在这个对象啊,如果说在新生区躲过了15次GC,那么可以升级到什么养老区,然后这个呢是偏向锁,这个呢是锁标识,这个呢,Java的指针保存持有偏向锁的线程ID,而e po呢是保存偏向时间戳好,那么来同学们。
04:07
结合这张图,32位不看,我们就看一下64最右边他说的是normal object,什么叫normal object,也就是什么普通的一个的对象,不加锁的对象,那么他告诉你前25位没有使用31位,那么呢,这个呢是从哈西。不用的,这有一位A级,这是四,四是什么意思啊?那么相当于说这个A级就代表保存对象的分带年龄,那么按照二进制二这个分带年龄0000由四位所构成,四位里面最大的是几?是不是1111,二进制里面那么四个一折算成我们的十进制二是多少?15明白,所以说GC保存对象的分带年龄就是15从哪来的?就是我们的对象头所规定的,OK,那么后面这个大家请看,那么就是我们的什么,是否是偏向所,是否是什么这个持有所锁的状态标志位等等,那么。
05:07
我们这张图从哪来的,那么相对于而言,我们就是从源码上面的定级给大家摘出来的,OK,那么后面比如偏上锁呀。包括他的所升级的这些东东,那么后面。所有的源码就对应着刚才我们这张图,那么给大家说清楚这些100%是有理论依据和出处的。好,那么通过上面的讲解,我们就会明白,对于我们的MA2的64位的分布图,什么对象布局啊,GC回收所升级的标识等等,都是通过MA2里面的标志位的变化,所以说1000道1万,我们后面的以及下一张就以这张图为根本,那么来给大家说一下全部的各种状态,深刻明白所升级到底是怎么一回事。好,那么同学们切记,对象头64位的这个一定要过一遍,非常的重要,全部的知识都在这三张图的整合里面,那么好,那么对于我们的对象头就给大家介绍到这儿。
我来说两句