00:00
各位同学大家好,我们继续通过上一讲,我们了解了S同步代码块,普通同步方法和静态同步方法,从自加码的角度,我们也明白了Java虚拟机是如何处理和识别的,比如说我们的ACC_S标识位,OK,那么这个呢就不再多说了,那么接下来我们更深入的要给大家介绍反编译。我们的源码从C语言的角度来给大家说一下think所到底是什么。这有个重要的面试题来。为什么任何一个对象都可以成为一个所?来,同学们,我们大家先恢复一下这个。我们大家都晓得啊,我这儿你那个object这个时候这个同步代码块里面的。括号里面的对象是什么,就代表要持有的,所这个时候我这写个object可不可以写别的呢?答案是可以的。那么假设我class。我这儿就写一个不可。那么大家都清楚。如果说我这儿不可的话。
01:03
New book同学们没问题吧。那么这。第一,相当于说不但是object。任何一个实例化的对象都可以丢进括号里面成为它持有的所,那么在这就来了,为什么任何一个对象都可以成为一个所呢?哎,那这个这个对象和这个对象肯定是不一样的呀,但是他们却殊途同归,都可以在括号里面成为一个所,这是为什么?那么他是不是要记录着现在哪一个线程持有了我,哪一些线程释放了我,然后我要释放以后才能给供给其他线程所使用啊?那么在这我们就要有必要数本回源,了解一下我们的object。来,同学们,我们大家都晓得啊。我们这儿不管写不写都清楚在Java里面是不是有且仅有一个最高的一个类祖宗类object.java那么一样,我们前面介绍过,对于我们而言的话。所谓的Java这门语言,就等于是C加加这门语言。
02:03
做了一些功能上的减少,对吧?所以说我们有必要带着大家通过面试题,再通过C底层的原语,进一步给大家了解到底这个snchize为什么每一个对象都可以成为我的所好,同学们,我们大家来看一下。大家都以前同学们的反馈,SY的实现原理monitor上一讲,我们是不是刚刚讲过n exit来,我们继续首先再复习一下。广成莫,到底这个是什么?直白的说就是我们的锁,但是更深度的,那么大家先请看这个管成英语就叫模拟塔监视器,哎,它们两个所管程监视器实际而言是一个意思,是一种程序结构,结构内的多个子程序形成多个工作线程,怎么着互斥访问,共享资源?既然是互斥,就代表是什么?Only one独占,哎,说白了,那么在这些的话呢,我们呢,就。
03:04
提供了一种机制,把这个管程就看作一个软件模块,共享变量和对这些变量的操作封装起来,形成一定的功能模块接口,然后呢来进行进程级别的并发控制,那么结合我们前面GVM虚拟机这本书上的经典可以看得出,那么这两个标识我们也了解了,执行线程就要要求先成功持有什么管程,也就是说现在哪一个线程进来,先持有这个B1,或者先持有这个object,先持有这个锁,谁就可以执行好。那么为什么任何一个对象。都可以成为一个锁呢,那么这我们就要通过open jdk8这个版本,或者sport虚拟机当中,Monitor就是我们这个监视器,其实是采用object monitor来实现的这个对象。对应着就保证了为什么每一个对象可以成为所好。那么同学们,我们来解读一下。来,首先我们晓得任何一个对象在Java里面是不是有个叫object叫Java,那么Java的底层是C加加。
04:08
对标过来。有object的Java,底层有点Java,然后这个是我们D的源码,Java虚拟机玩的是C加加,它读的是点CPC,然后这是我们的定义的头文件,好,那么同学们我们找题。给大家看一下这个源码,首先open gdk8这个源码它的目录呢非常深,所以说我们常用的这三个对象,那么老师呢,已经给大家呢找好节约大家的时间,那么来同学们请看在我们Java里面。是不是有东西叫object?你看我们首先object object管成来怎么着,它是不是也继承了虚拟机的object?OK,那么好的,他继承了以后来你有一个对象的时候,实际而言是不是要用我父类把我们的内存地址提交啊,完了以后大家请看。
05:03
这个是点Java,但是Java虚拟机真真正正运作起来是点CPP,好,那么object类里面的。点,这时候它引入头文件,这是一个定义,相当于javaport,那么runtime这个文件下面的object monitor.hp那么这个顺便说一下,接近等同于类似于我们的object.java好,那么同学们,我们大家都晓得,对于我们object.java啊,假设我们的object,那么这个时候大家都清楚。我们这儿是不是经常会写过这样的代码,比方说this点什么notify,那么this点什么wait等等等等,那么这些是在object类里面所定的,对吧?那么当然了。都会看得出什么notify wait,这个叫object的Java,底层的是object monitor c,那么对应的啊,大家请看。那么对应着我们的啊。
06:01
1400多行的时候,大家一眼wait notify notify what,大家请看是不是叫这个,是不是叫方法引用类似于我们的语法wait,那么诸如此类,还有其他方法都可以在这可以找到,嗯,顺便说一下啊,不要求大家掌握这个C的源码阅读,那大家漏一眼多少行,接近2000多行,不要为了读源码而读源码,老师只是为了加深大家的理解,好,那么这个时候你找得到最好,找不到也无所谓,但是你了解Java的底子是C,那么这我杰莫的Java到我们的CP,然后结合我们前面所说的。它引入了我们的头文件。完了以后,这有个object。莫妮点HPP搁到这儿来,同学们找过来了,以后大家请看,我们这会有一个东西叫初始化,这个莫尼塔就是我们的监视器所管程,它这个里面你看有一大堆预先定义好的变量,这个就是回答并解释了为什么每一个对象传到我们的。
07:07
同步代码块里面都可以作为莫监视器,理由是这样的,因为每一个对象天生就带着一个对象的监视器,每一个被锁住对象都会和莫妮塔关联起来,什么意思啊,来,同学们。我们在这儿,我莫妮塔这一个叫什么欧?这个上面呢,有很多属性,这个欧最重要就是指向持有object莫对象的线程,也即我们每一个Java的组宗都是object,但是object莫对应着C,它底子有个叫欧,这叫记录哪一个线程,现在使用了我使有了我这个被记录的就代表是当前持有对象持有锁的这个线程必须等它释放了以后,我们才能够获得锁,进一步的去强索,所以说谁持有谁记录,谁释放谁取消的原则,也记为什么每个对象都可以成为一个object管程,那么这个时候就是因为它会记录谁持有了这个对象的线程,OK,那么其他的,比如说wait,哎,Wait状态的,那么ENT list阻塞状态的来后面我们会介绍可重入锁又会记录这个对象作为模妮塔,它被记入了几次来看,它用来记录现场获取锁的次数等等等等,原来每个对象它里面是有一本小本本,记着了。
08:26
全部的账目信息好,那么所以说在这我们就会明白,对于C语言而言,人家天生object莫就带着这么一个欧的属性记录哪一个线程进来持有的锁好,那么这个我们呢,就从自解码和。汇编的角度给大家介绍了size。我相信现在大家对SNCH的作用和它的。底层原理应该有一定的提升,那么最后还没完呢,让大家痛苦一下,待到后面的第12章,我们结合GVM,还要更进一步的给大家说一下森关键字,比如说五所。
09:02
偏向所轻量所重量所,它的所升级的心路历程,那么我们来提前剧透混个眼熟来,大家请看think啊,必须作用于某个对象当中,对吧?那么作用了以后,结合我们的底层这些东西还会进一步说,那么它会有对象的头文件存储了什么所的相关信息,那比如说最经典的我们就说过这个现在是哪一个线程来持有了这把锁,对吧?那么升级以后面依赖于Java虚拟机里面的mawa中的锁标志啊等等等等,那么后续讲解我们再加深,那么目前呢,承前启后的学习,大家先混个眼熟就行了,那么对于获获port,那么对于64位的Java虚拟机。它的底层石有锁还是没有持有锁,这些标志位的变化从无所偏向,轻量、重量都会给大家做一个更深入的讲解。好,那么到这儿我们对SNCH讲解就暂告一段落。
我来说两句