00:00
那么接下来啊,咱们就开始来讲这个垃圾回收相关的一个章节了,那在咱们这个课件里边啊,那对应的是我们这样的几个章节,14章呢叫垃圾回收的一个概述,15章呢叫垃圾回收相关的算法,哎,16呢,相关的概念和垃圾回收器,这呢,就整个构成的是我们垃圾回收相关的几个章节,那讲这个第14章之前啊,咱们首先来看这样一个图。之前呢,咱们带家带大家呢,也稍微的看过这个图,就是大家得清楚我们这个GM呢,整个呢,要分成这样的几个部分,对吧,前面我们提到过,就是咱们最终目的啊,肯定是希望咱们运行的这个系统啊,这个性能呢,是不断的进行优化的啊,尤其在我们这个业务越来越复杂的这个场景下,那要想对性能进行优化,那我们一方面呢,是这个上层的一些代码上的优化啊,一方面是底层呢,就在我们这个系统层面的一个优化,那这呢,我们就要想进行优化呢,咱们需要呢,对当前的这个程序的性能啊进行一个监控。这呢也是咱们下篇要讲的一些命令行和可视化工具方面的一些这个性能监控的这个内容,那么在进行性能监控的前提呢,是你得懂这个整个我们数据在Java这个层面呢,虚拟机上的数据的一个分配和回收的一个策略。
01:10
这呢,就是我们说那个黄色的部分,那你要想能够明白这个内存的一个分配和回收策略的前提呢,是你得先懂这个内存的一个结构,对吧?呃,现在懂得懂这个内存的结构,那么这个内存结构呢,我们诶对于它进行一个使用之前呢,咱们还得需要考虑到叫类加载器。类的加载器,相当于呢,我们使用这个类的加载器,将咱们这个自解码文件呢,加载到这个内存当中,那真正要执行的话呢,我们还需要借助一叫执行引擎,所以这呢是我们又辅助的三个内容,那咱们呢,在前面这个章节当中啊,关于这个类的加载器,类的加载过程基本上呢,咱们已经梳理完了,它呢也是构成咱们整个呢,说这个GM的一个算是叫上层结构,对吧。这呢我们称为呢叫上层,这是关于我们说的叫类加载器的这个问题,然后这个class文件结构呢,这个是放在咱们这个中篇的时候给大家来讲解的,就包括自解码指令,那我们如何呢去剖析这个class文件,这个是咱们中篇啊给大家呢要讲解的问题,那执行引擎呢,是构成咱们GM的这个下层,咱们呢,前边呢,关于这个解释器编译器当时呢,已经讲过了,对吧?那么关于垃圾回收呢,这就是咱们接下来这几个章节呢,要给大家做一个讲解。
02:22
哎,做个讲解,那内存结构这块呢,关于运营师数据区,咱们呢,已经比较详细的给大家讲清楚了,具体的细节在面试当中呢,问的也比较多,下来呢,大家再去回顾回去回顾回顾啊,整理整理啊,能够保证呢,基本上你要是能把我讲的这个内容呢,能够捋清楚的话呢,我觉得你面试的时候,至少关于GM这块呢,腰杆呢还是可以硬一些的。啊行,那么讲完了我们这个内存这个结构以后呢,下边这叫内存的分配与回收,那其实这个分配跟回收啊,这个咱们没办法把它这个拆分的多清清晰了,就是分配的同时呢,我们可能就在进行回收,对吧?就像咱们前面讲的这个对空间里边涉及到这个叫新生代,涉及到这个叫老年代,新生代里边有伊甸园区域,有SURVIVOR0区一区,然后这块呢,我们在进行这个样JC的时候呢,其实就涉及到这个数据的一个分配和回收了,在前面呢,其实我们也提到过相关的一些这个JC的过程,对吧,只不过这里边呢,我们谈的就更加的细致。
03:17
啊细致一些,包括一些算法呢,我们就是深入的去做一个讲解,好这呢就是我们现在呢,重点要关注的这样几个章节,是从这块呢来看一下。行,那么刚才呢,我们提到了主要关于垃圾回收这块呢,是涉及到这样四个章节,那第一个章节呢,相对来说比较简单一些啊,就是一些概述性质,咱们一会儿呢,就说一说,那关于这个垃圾回收相关的算法呢,我们重点呢,要分成叫垃圾标记阶段的相关算法,标记的时候呢,我们这个大家多少可能也听说过啊,比如说叫引用技术算法呀,比如叫跟搜索算法呀,或者叫可达性分析,对吧,我们重点要讲解的实际上就这两个算法,那么这个在垃圾标记阶段呢,就刚才说的这两个算法,然后呢,在垃圾清除阶段呢,有标记清除,有这个复制算法,有标记整理,有这个分带收集算法等等。
04:04
啊,这个呢,都是咱们在第15章当中给大家要讲解的内容,那么第16章呢,涉及到垃圾回收相关的一些概念。比如说呢,我们这个面试里边也会提到的啊,像system.jc re.jc这个不同的方法的调用,它是什么意思,包括呢,什么叫内存的泄露,什么叫内存的溢出,对吧?这个stop the word,以前咱们讲这个堆的时候呢,提到过这个概念,说呢,呃,一定程度上这个JC的时候呢,我们都会这个进出现这个叫stop the word这两个场景,那什么叫stop the world啊为什么呢,我们不希望它出现,对吧?那以及呢,我们说呃在这块相关我们引入了几个概念,叫做强引用,软引用,弱引用,虚引用啊这几个概念呢,是什么意思,咱们也给大家做一个解释,然后最后一张呢,涉及到垃回垃圾回收器,这呢就是真正落地我们相关的一些产品了。那真正这个JC要想实现的话呢,我们需要借助于垃圾回收器,那我们会讲解呢,整个啊,从一开始有的咱们这叫CJC,就串行的垃圾回收器,后边呢,有这个叫PI new parallly是吧?哎,包括parallly o啊,Theory o等等啊这个有的适用于新生代,有的适用于老年代,哎这样的一些垃圾回收器,包括呢,呃,后来呢,还出现了叫CMS,第一款呢,叫并发的垃圾回收器啊,以低延迟呢为主要目标,然后还有我们现在呢这个。
05:19
这个JDK当中默认的使用叫g first垃圾回收器,对吧?那嗯,泛泛的来说一下的话呢,我们要给大家讲这样一个事实,就是关于垃圾回收器的这个JC方面啊,在咱们JDK咱们前面呢,就是讲这个内存的时候呢,大家其实有感觉哈,就是咱们一说呢,是不是就说到JDK6JDK7JDK8是这意思吧,啊那么在内存层面呢,基本上在咱们这个讲完八以后呢,后续的这个变化呢,其实就比较小了,那我们出现源空间,包括呢,就是原来在永纽带里边的像Z串常量池啊,像这个静态域啊,我们诶该放到堆里边就放到堆里边了,从内存的角度呢,八以后基本上变化就比较小了,相当于也实现了我们说叫呃houseboard和g rockck这两款虚拟的一个融合。
06:05
啊就统一了对吧,以前呢,是因为咱们说J跟HOUSE2个虚拟呢,他们内存结构不太一样,咱们那个J里边呢,它是没有这个永久带的啊,所以呢,在这个内存层面呢,这块更新基本上就暂时告一段落。啊,那对于咱们说这个垃圾回收这块呢,发现就不是这样子了,这个JC啊,大家如果你有意识的去关注一下咱们JDK,大家也知道咱们JDK呢,现在是每隔半年就更新一个版本,对吧,那每次更新的时候呢,大家基本上你一定会看到JC相关的一些信息的,也就是说呢,咱们这个垃圾回收这块呢,是不断的在进行优化和更新,那提升咱们Java这个程序的一个性能。那如果大家呢,你有兴趣的,你可以去像哔哩哔哩啊,或者咱们商务官网呢,你去搜一下这个JDK14或者叫JAVA14这个新特性,大家呢,可以去搜一下,前段时间呢,这不是发布的,然后我录了一套这个视频,大家可以去看一看,那里边呢,就关于咱们JDK14当中提到了一个叫CMS,这个垃圾回收器呢,已经不再使用了,包括呢,我们还有一个搭配的一个使用的结构啊,也被这个干掉了。
07:09
啊,这呢都是一些新的变化,就是每一个JDK版本呢,你都会看到这些变化。那么在面试当中呢,大家其其实呢啊,你及时性的关于垃圾回收这块,当对方问到的时候呢,你把这个内容给他加进去,绝对是加分的,甚至呢,你可能把对方说的都一愣一愣的是吧,你除了告诉他说我们有这样变化之外呢,你还要告诉他说为什么会有这样的变化,甚至你再来一句说将来还会有什么样的变化,这一下就很牛了。啊,刚才呢,咱们说提到了叫G1,那其实上后边呢,咱们说要提到一个,哎,这呢叫来自未来的叫ZJC,可以预见的未来呢,一定ZJC呢,会去替换咱们的J1垃圾回收器,包括呢,还有呢叫呃深圳豆啊JC,还有呢叫X龙JC等等,都是我们后续的这些版本当中出现的一些新的垃圾回收器。那不排除后边还会有更新的对吧,那暂时来看到的就是这个ZZJC啊,迟早有一天呢,会替换到这个G1的,现在它还不断的在优化,在储备。
08:03
行,那咱们这个呢,关于垃圾回收器呢,在第17章章章当中,咱都会呢,给大家讲到,那下边呢,咱们就来看一下这个第14章,哎,关于垃圾回收器的一个概述。
我来说两句