00:00
好,那接下来啊,咱们来看一看这个垃圾回收器相关的这样的一些选项啊,这儿呢,又列举了一下,我们再讲这个上面当中提到的一些经典的垃圾回收器啊,首先的话呢,咱们针对于前面讲到的这个垃圾回收器啊,做一个简单的一个复习,那当然这个事儿也很重要啊呃,我们这里边呢,提到了叫七款经典的垃圾回收器啊,所谓的经典呢,就是咱们没有把像这个ZJC,或者说呢,这个神豆啊JC涵盖在内啊,主要呢,包含的就是这first垃圾回收器及之前的这样的一些垃圾回收器啊。啊,首先的话呢,这个我们在上篇也提到过哈,说为什么要引入这么多的垃圾回收器啊,一个还不够吗?啊整了七个碗是吧,干什么呢?呃,这个我们要说清楚,就是Java的话呢,呃,首先呢,Java的应用场景就很多,对吧?有这个嵌入式设备啊,移动式的这种设备,还有服务器端啊等等啊由于呢,Java的应用场景的不同,所以呢,导致我们,诶是不是针对不同的场景,是不是要提供不同的垃圾回收器啊。对吧,哎,进而的话呢,我们呃,提升你这个大机回周期在具体这个场景下的一个性能啊,进而的话呢,是不是提高Java应用程序的一个性能,对吧?哎,相当于呢,就叫什么,具体问题得具体分析,使用具体的JC。
01:13
啊,这个JC呢,这个C是collector的意思啊,不是那个collect啊,就是垃圾回收器的意思,好,那这里边呢,我就列举出来了,新生代能用的,还有老年代能用的,这个g first的话呢,这个是新生代老年都行,因为它是一个叫什么分区了是吧。就是那个使用不同的这个region来表示这个新生代和老年代的一个部分的啊呃,那这个呢,细节就不用展开了,大家应该都很熟啊,然后这个图的话呢,需要大家去记住啊,这个垃圾回收器呢,新生代和老年代他们之间有一个这种组合关系啊,这个凡是有线的,不管是实线还是虚线啊,都是曾经相爱过啊,有的现在还在相爱是吧,虚线的话呢,就是分手了。啊,那我们这里边呢,再回顾一下当时怎么讲的啊,这个新生代老年代一般的话呢,我们是上边一个下边一个啊,一个男的一个女的搭配起来是吧,那这哥们的话呢,相当于是不是就自己独身主义啊,啊自己不跟别人玩啊,自己一个人单身,那这俩的话呢,相当于是不是就同志关系了是吧?啊就是当我们这个CMS啊出现一个并发飞列的时候啊,失败了,诶我们可以把这个CJC呢CO的JC是吧,当成他的一个后备方案啊,虽然说这个事呢,很崩溃啊。
02:22
你想想你现在呢,CMS呢,是主打这个并发的是吧?呃,低延迟啊,这个用户体验也很好,突然呢,它挂掉了之后呢,一下子就变成了一个串行的啊,如果进行垃圾回收的时候,用户现场就给停掉了,你想这个用户体验他得多差啊,这个这个很崩溃啊。好呃,那么再回顾一下当时咱们讲的这几个虚线的一个情况啊,除了呢,现有的这个原有的这个线的搭配之后呢,我们说这个JDK呢,也在不断的迭代更新,在JDK8的时候,两根红线啊出现了,就变成这个虚线了,YG呢CMS呢就不能跟这个CJC啊这个。哎,这个JC呢,就不能跟我们这个SJ它俩搭配了,八当中呢,把它俩呃标记成一个啊,就是被这个叫什么过时了啊,当然还可以用在JDK9当中呢,就彻底的把这俩给干掉了啊,就不用了啊,就是这两根线呢就没有了。
03:14
啊,不能搭配了啊,注意行,然后这个绿色的这个虚线呢,指的是在JDK14的时候啊,在JK14的时候呢,我们这个parallel skyin j c这个是一个并行的是吧?哎,就不能跟我们这个COO的JC呢去搭配了啊,直接呢就弃用了啊你像弃用也是有道理的,因为我们在老年代呢,是不是你有一个parallel o的JCU啊,我有病情呢,我干嘛用这个串醒的呢?对吧?诶所以这个呢,是我们主要强调使用的了啊,这个就干掉了啊,基本上也不用吧。呃,然后呢,还有一个变化是在这个JDK14的时候呢,把这个CMS呢给干掉了。诶大家会发现呢,在我们现有的这个图当中,这个CMS呢,你看这个搭配的这个伙伴还挺多的是吧?诶然后他一干掉之后呢,这个意义还挺大的是吧,那就言外之意呢,我们主打用户低延迟的啊,推荐呢使用这first了啊,因为这俩哥们呢,主要是主打这个低暂停时间的嘛啊低延迟啊比较好的用户响应啊,诶没有它了,那我们就用这个g first了啊,G first现在还非常强大啊。
04:13
当然呢,我们说还有最新的叫CJC啊,CJC呢当然就更强大,也是这个垃圾回收器的未来啊,啊这块呢,我们先对这个垃圾回收器呢,整体上先做了一个介绍啊,然后的话呢,我们诶如果想看一下当前这个程序当中使用的是什么垃圾回收器啊,咱们也有对应的这个指令啊,这个指令的话呢,不用多说了,嗯,直接呢,在大家在这个命令行执行的时候呢,你看一下啊,比如我呃使用这个u g first GC一看呢,是一个减号,那就表示呢,你没有用。啊,就相当于是,呃,这个呢,没有启用对吧?诶这呢是一种方式啊,咱们在讲前面这个情况的时候,不也演示过吗?哎,如果呢,你想看下命令行使用这个参数是什么,哎,还可以用这样的一个啊,Print command line flags啊这个参数也行啊,这个呢,咱们呃没提过啊演示一下。比如说呢,咱们还以刚才写的这个啊,He up instance这个程序为例,是吧,呃,当然呢,把这个程序呢,参数这个位置咱们在这个,比如说最后啊补一个这样的一个参数啊,关于这个AR文件这个呃,留着也行啊,哎,补上这个参数以后呢,我们点上OK,此时呢,把这个程序呢跑起来。
05:18
好,这时候你看其实已经看到了是吧?呃,后续呢,是我们这有一个sleep,然后最后呢,报了一个OM的啊呃,然后在上面这个呢,呃,这个信息其实就我们刚才呢,哎,调用的这个print。啊,这个commander flex啊,在这里边的话呢,一方面能够看到咱们刚才设置的这样的一些参数,对吧,那另外的话呢,我们看到这个后边它能够显示咱们当前使用的这个垃圾回收器。啊,使用的垃圾回收器,在这这个八当中,我们parallel jc是默认的垃圾回收器啊,这个大家要记住啊,说呢这个parallel j c,这不是只是这个叫什么新生代的吗?是吧,我们老年代用的是谁呢?啊这个咱们前面也讲过啊,新生代呢,这个叫parallel啊,这个叫parallel old。对吧,这俩哥们呢,你只要设置一个啊,对方呢就会被激活啊,就是互相激活的一个意思啊,因为他俩呢是搭配使用的嘛。
06:08
啊,你从这个图上来看,从这个图上来看的话呢,因为我们刚才用了这哥们儿,他也没有跟这个JDK10子也干掉了是吧,默认情况下呢,他也不跟这个哥们去搭配了,那其实就是跟这个搭配,所以呢,他俩这个参数呢,是可以互相激活的啊。行,这呢是我们说查看这个默认的垃圾回收器啊先呢,对咱们前面讲过的这样的一些内容呢,先做了一个复习啊,下边呢,我们看看具体的一个垃圾回收器它的一些参数。
我来说两句