00:00
我们来看一下JDK实词当中比较高级的一些变化,嗯,这个所谓的高级啊,实际上就是偏底层的一些变化了,这里呢提到了说弃用叫parallly和theory old j c的一个组合。那么咱们说呀,关于每一个GDK版本更新的话呢,我们从这样三个角度呢去学习对吧?那么前面呢,咱们讲的这五个新特性啊,其实更多的呢,是从这个语法层面的一些变化,大家呢,对应下来的,你对应的代码呢,去敲一敲,写一写,熟悉熟悉,那么也能看到,就是咱们讲的前面呢,这五个新的语法上的一些变化呢,在未来的版本中,有的呢已经确定下来了,有的呢即将被确定,一定是能够使用下来的,这个不用担心。那么这个API层面呢,在我们JDK14当中啊,变化不多,所以这块呢,我们在十字当中,这不是一个重点,接下来呢,我们再看一下这个底层的一个优化,底层优化呢,咱们说过主要呢,就是GM的一个变化,对吧,那么在GM这块呢,我们提到的主要就是这个JC的一个变化。这个JC,当然呢,这个正常来讲哈,大家开发中可能不用过多的去研究这个JC,但是呢,一旦作为这个高级成员GM呢,在面试当中这是必问的项,而且呢越问越深。
01:10
对吧,那如果大家呢,关于这个GM学习呢,有任何问题的话呢,你可以登录咱们商务官网,包括呢鼓励学院大家呢去学习就行,当然呢,也录了一套这个GM的视频,或者呢,你到这个第三方的,像这个哔哩哔哩这样平台上,大家呢去搜这个GM。做这个GM,然后呢,嗯,这两套呢,都是咱们商务录制的这个视频啊,这个也是我录的,这个质量呢,应该算还是非常不错的,只不过呢,现在这个还没有及时的去更新啊,这个大家呢,随后你可以呢来这块学习,你如果是还没有学过的话呢,你学的过程当中,这个呢,咱们也就更新了这个随后呢我就会更新这个GM呢,这套视频讲的呢,应该算是这个市面上是最全最深入的一套了,好,那GM呢,是面试当中必不可少的,那我们这里看一下这个JC在我们实子当中做了哪些变化,这呢是咱们的第一个变化。下边呢,还有其他的新特性,咱们一会儿说这呢,就提到了,在我们新生代当中提到了一个叫并行的垃圾回收剂,叫powerline,那这个垃圾回收器呢,跟我们这个老年代当中,老年代的垃圾回收用到一个叫zero old这样的垃圾回收器,他俩呢,这个组合关系呢,被干掉了。
02:19
那一提到这块呢,我们就先从长计议一下,因为有的这个小伙伴啊,可能关于这个GC这块了解的并不多,我在这个图当中描述的一共是不是叫七种垃圾回收器啊。1234567,这七种呢,也是我们通常称为叫经典的垃圾回收器。那一说到这个经典什么意思啊。嗯,一般我们说的这个经典的话呢,比如说你去这个嗯咖啡厅说来一杯来一杯这个经典的拿铁,那洋IG呢,是不是还有这个拿铁,还有其他的口味啊,这个经典呢,就是说比较早一些,比较纯正一些是吧,一般呢,这叫经典,那这呢,我提到叫经典的七种,言外之意呢,就我们后边啊,还有其他新的垃圾回收器。一会儿呢,咱们讲一讲,那咱这儿呢,主要就说这七种。
03:01
这七种当中啊,上边这三个主要呢,来负责新生代的垃圾回收,那新生代老年代大家应该不陌生了吧,这个我们将堆空间是不是就分成叫新生代和老年代,对吧?新生代这块呢,我们用zero PI new和powerline这样的三个垃圾回收器进行回收,然后老年代这块呢,我们使用的叫CMS,是一个第一款并发的垃圾回收器,还有呢,叫zero o,这是串行的,然后呢,Powerllly这是这个并行的,对吧?这是三款这个老年代的垃圾回收器,然后G1的话呢,是基于这个分区的,所以呢,它是既适用于新生代也适用于老年代,或者说呢,它已经不严格的区分,区分这个新生代和老年代了啊是这样的情况,咱们G1呢先不多说,这里边的话呢,既然我们推空间呢,既涉及到新生代和老年代,所以我们就要搭配去使用。首先我们想强调的就是在JDK8当中,应该说。在这写的是吧,在JDK8当中啊,将我们这个CMS和这个zero他俩呢,就标示为一个叫deprecated,就是一个被这个过时了是吧,九当中呢,是直接呢就给干掉了,是这样子的,就是你不能再用了啊,那么在这个八当中也是老年代的这个SOLD呢,跟我们这个新生代里边这个per new他俩呢,也进行了一个叫depreated,就是一个废弃,那么在酒当中也是做了一个移除,大家就不能再使用了。
04:17
这个呢,如果你要不清楚这块呢,在面试当中要把这个点呢抛出来,这呢也是一个比较新颖的一个点,好,那咱们现在要提出来的呢,是把这根线呢也给干掉了。也就是说我们在新生态当中啊,呃,如果你使用的是一个叫并行的叫powerline,那么在老年代这块呢,就不要再去使用叫zero old了。为啥呢?你看我老年代这块,咱们是不是都有一个叫para的呀,我新生代用个并行的,咱们老年代也用并行的不就完了吗?这个效率是不是更高一些呀,那完全就没有必要呢,老年代使用这个串行了,显然效率是不是就更差一些?诶就是这个情况,那么咱们官方呢,是怎么解释这个事儿的呢?看一下官方呢,给出的理由呢,是这样子的啊说呢,这个JC组合需要大量的代码维护。
05:05
并且啊,这个JC组合啊,很少被使用。这块提到一个很少被使用对吧,为啥不使用呢?不合适呗,因为这个使用的场景是什么呀,需要一个很大的样区,配合一个很小的old区。啊,为什么这么讲呢?这个样区要大,是因为咱们这个paraly啊,它使用的这叫复制算法复制嘛,所以我们需要提供两块空间,这个大家如果不清楚,还是呢去这个。哔哩哔哩上你看这两套视频,回头呢我都会去讲,到现在呢,还没更新到这儿啊,最后呢就更新了,OK,就是我们这个用的是复制算法,所以呢它要用两块空间,所以这个样区呢要大一些,这个老年区的话呢,这个zero old的呢,它是一个串行的,显然这个串行的效率啊,是不是要更差一些。对吧,而且呢,这个CUOLD呢,它在停顿时间呢,也不是特别理想,所以咱们一般呢,不使用它,或者换句话说呢,已经有了这个叫parallel old并行的一个选择了,那我们干什么还要用串行呢。对吧,就是这样个原因。
06:01
嗯,那么多说一句啊,大家会发现我们这块呢,是不是还连着一根线呀,那这根线咋解释啊。在这里边最特殊的线其实就它了,说呢,明明这个新生代老年代呢,是有一个大根线,那怎么这块还有一个这个叫什么三角三三角链呢,是吧,这个线的意思就是表示咱们CMS叫并发的垃圾回收集,如果它这个并发过程当中出现问题了,这个导致不能正常执行的时候呢,我们会把CO呢当成一个后备方案啊,是这样一个情况啊。OK,那这呢就提到我们这个新特性,大家知道为什么我们要把它标志成一个叫depre,在实字当中标志成一个叫过时,那么肯定在未来的某一个版本当中就把它废弃了,所以大家呢,现在就不要用了,那如果用的时候会怎样呢?我这呢给大家举例子了,咱们还是这块看一个这个代码的情况啊。我这儿呢,写了一个非常简单的一个代码。嗯,非常简单,所以我这块就没直接写了,造了一个list,然后Y1处的方式呢,我们去建一个这个内部的一个角距无变量,是一个长度为100的字节的一个数组,把它添加到咱们这个例子当中,就这样一个程序,对吧?那么这个程序呢,咱们现在如果你要是使用我在这里边放的这个呢,就粘到这儿了,这两个中的任何一个呢,去指定指定咱们新生代或老年代这个垃圾回收器的话呢,它就会报这样的一个这个信息警告。
07:20
你看这块我们使用的是不是叫parall j c,这叫para o的这个JC,你这块呢,出现了我们这个结构的时候呢,把它CTRLC一下这个程序,如果你要没执行过呢,咱们可以先给它做一个re compile是吧,先做一个编译啊。好编译完以后呢,我们在这个run这块打开这个edit,然后我们把它呢CTRLV粘到这。哎,站在这儿以后,我们点一下OK,做一个执行。行这块大家会看到此时呢,说你这个use powerly old,这个JC呢,它被depated了,在我们这个十字的版本当中。不行是吧,那这个呢,也同样道理,我就呢不演示了,那也就是说呢,我们在诗当中大家注意点,这个组合呢,已经被干掉了。当然还没有完全的干掉,只是说呢de了是吧,未来肯定会被干掉,所以呢,如果面试的时候呢,大家讲到这样一个新特性的话呢,一定会加分的,因为呢,你是不是实时的去跟进咱们这个,嗯,这C项的一些变化,对吧,而且为什么要把它干掉呢,这是不是说的也很清楚啊。
08:15
哎,那么面试官呢,一定会非常满意。好,这呢就是我们说的这样的一个新特性。
我来说两句