00:00
行,那么咱们第15章呢,就先告一段落了,整个呢,关于垃圾回收这块呢,我们说一共是有四个章节,对吧?那么垃圾回收最重要的呢,肯定是回收的相关算法,以及呢各种各样的垃圾回收器,不管呢,是在我们平时这个开发当中,咱们接触最多的叫垃圾回收器,那使用的呢,就是相关的回收算法,对吧?还是呢,从我们这个面试当中问的比较多的呢,也是垃圾回收相关的算法和垃圾回收器,但是呢,在讲完这个算法之后呢,我们并没有马上啊,咱们要讲这个回收器这儿呢,给大家再补充一个章节,叫做垃圾回收的相关概念。啊,就是除了这个算法和这个垃圾回收器之外呢,我们说还有一些需要给大家呢去补充的一些内容,呃,这些内容呢,会让我们整个的垃圾回收这块呢,诶大家呢,脑子当中形成一个完整的系统啊,内容啊就更加的完备一些啊就像咱们平时大家你吃这个排骨的时候啊,上来一盘排骨是吧,这个排骨的话呢,不光只有这个肉跟骨头,那我们是不是也要放点汤啊,那有了这个汤之后呢,才能让这个菜呢,是不是有滋有味对吧?那咱们这一张呢,就是类似于这个汤一样,或者叫调味品一样,对吧?那这张呢,你看这个目录的话呢,看着会显得稍微的有点杂,因为呢,就是我们诶这个在算法和垃圾回收器之外的一些补充的概念,OK,那这里边呢,我们有这样的几个事儿呢,想给大家做一个分享,哎,我这呢,虽然列举出来的十个点,但实际上呢,我们可以看成呢,是有六个点啊,为什么这么讲来,你看我们稍微的给大家解释一下。
01:27
首先呢,第一个呢叫system.gc那这呢,JC是system下的一个方法,通过这个方法呢,调用呢,我们可以去主动来调用这个垃圾回收器啊,做一个垃圾回收啊,实际上是一个for GC对吧?那么这个方法的话呢,我们在开发中一般用的比较少,但是呢,我们也可以去调用,关于这个方法呢,咱们给大家解释一下,这是第一个问题,那第二个问题呢,我们叫内存的溢出和内存的泄露。啊,虽然说Java有自动的内存管理和呢诶自动的垃圾回收机制啊,但是呢,我们并不能保证Java程序呢,不出现内存溢出和内存泄露的问题。
02:01
这个是很对的,对吧,这个大家呢,学Java呢,最初应该是能明确这个问题,那么我们就要看一下这个,呃,Java呢,我们内存溢出啊,有哪些场景,其实我们前面都已经举过很多的例子了,对吧?啊举过很多例子,而且在实际生产环境当中,诶,如果我们这个程序呢,运行了很长时间,最后呢,突然爆出个内存溢出的问题,这时候呢,大家就需要看相关的一些日志信息,看看到底是什么原因造成了内存的溢出,那这个呢,就需要我们去做一个调优,OK。那同时的话呢,我们要了解一下,在Java这个语言层面,什么叫内存泄露,那在网上呢,有时候也会举很多的例子是吧,大家去搜索一些帖子的时候呢,也都能搜出来,这时候你要注意有些呢,它举的例子呢,其实是不太对的啊,实际上是不太对的,因为呢,咱们Java当中,咱使用的是不是叫可达性分析算法,对吧?你得从这个算法出发,我们看看什么叫内存泄露,你不能呢去举那个叫引用技术算法里边呢,涉及到的叫这个内存泄露问题啊,这个大家要注意啊,同时的话呢,大家应该也都清楚说我们内存泄露的,如果数据过多的话呢,是不是说也会造成我们内存的溢出问题啊。
03:03
啊是这样子的啊,那么们关于这块呢,诶再给大家做一个解释,OK,然后下个呢,叫做stop the word啊也简称了叫STW,那这个词呢,咱们在前边呢,其实讲内存的时候啊,讲前面这个回收算法的时候呢,咱们也给大家呢,提到过这样的一个词HW,就使得呢,咱们当前的这个应用程序的用户限制呢,停止,那我们要进行垃圾回收了,那这个时候呢,就是称为叫STW啊,那STW时间越长呢,我们称为叫停顿时间越长。啊,或者叫低延迟呢,就越差的效果,那这呢,我们要给大家解释一下啊,这个什么叫ITW,那以后呢,咱们呃讲这个下一章涉及到垃圾回收器的时候呢,我们一说ITW大家就非常清楚,OK,然后再一个概念呢,叫垃圾回收的一个病情与并发。这个呢,也可以理解成呢,是对咱们是为咱们下一章呢做一个铺垫,咱们下一章呢,讲各种各样的垃圾回收器,那其中呢有这个叫串行的,那其中呢有并行的,那还有呢,现在主流的呢,我们讲就叫并发的,对吧?那么在垃圾回收这一方面呢,什么叫并行,什么叫并发呢?诶咱们这块呢,给大家解释清楚,这是为我们下一章呢做铺垫,OK,然后再下一个问题呢,称为叫安全点与安全区域这个词的话呢,不知道大家有没有之前了解过,嗯,就是我们这个应用,应用程序的这个用户限制正在执行,那么我们现在要GC了,这个GC的时候,大家注意并不是说用户线程在执行的过程当中,你想JC随时呢就能停下来去JC。
04:27
啊,因为这时候一停下来,用户现场,我们这个垃圾回收现场要执行了,对吧,并不是任何位置都可以随时呢停下来,就是这个用户现场啊,我们只有呢,在这个安全点的位置才可以让用户线程停下来,然后呢,我们再进行这个JC,那这呢,就是我们提到一条,那安全点的一个概念啊,那么安全区域呢,就是在整个这个区域,它是一个时间段是吧,或者叫一个代码段了。在这个安全区域的这个范围之内呢,我们的用户线上都可以停下来,然后呢,诶让我们这个JC线上开始去执行,那这儿呢,就提到一个安全点和安全区域,那其实呢,概念并不是特别难,只不过呢,大家呢,可能没有听过或者不知道这回事儿。
05:09
啊,那这个平时在这个交流过程当中啊,一说到安全点,安全区域呢,你不能说对自己来讲是个盲点是吧,这块就稍微差点意思啊,这个呢,咱们给大家做一个解释,然后呢,为什么说我们这一章呢有六个点呢,是因为前五个之外呢,剩下的这五个呢,咱们都可以归结成是一个知识点,那就是关于Java中引用的一个交流。哎,引用的一个交流,那么引用这块有什么可说的呢?那大家呢,平时咱们这个使用Java语言的话呢,造对象,那咱们这个更多的时候呢,是不是左边生明一个已用变量,当然前面先有个类型对吧,然后呢,右边呢,就具体的给它有个对象,这呢是咱们见的最多的场景,那么这种场景实际上啊,仅仅是其中的一种引用,那称为呢叫强引用。那大家说诶,好像除了强用之外,我好像也没用过别的应用,那就是说明咱们强应用呢,在实际开发当中使用的场景呢,或者我们这个代码的情况呢,是极多的啊,99%咱们造的这些对象呢,其实都属于叫强引用。
06:07
啊,都属于这个叫强用,那么强用这个特点是什么呀?大家应该也都比较清楚了,咱们前面呢也都讲了这么多了啊强用的特点呢,你看我描述就是当我们堆空间你用的这个对象发现呢,在站空间当中始终当然也不一定非得是占了啊咱们不是说这些roots是不是有好多个,呃,这个这个位置都可以作为J些root对吧?行,那比如说呢,我们这时候是虚拟站里边的一个局部变量表里边一个变量,啊说这个变量呢,就指向了你堆空间的这个实体啊,那由于你存在这样一个引用,所以就导致我们堆空间的这个对象呢,是不是就没办法回收,这咱们讲过叫可达性分析算法对吧?行,那么强引用的特点是什么呢?就是说你只要这个引用存在呢,我就不会回收你,那如果说我们堆空间中的这个强引用过多的时候,或者对象过多的时候呢,咱们说就可能会报这个OM。对吧,那就可能会报OM这呢咱们都比较清楚了,前面呢都是这样子的,那除此之外呢,咱们说还给大家要讲这样的几个引用,说这个引用主要干什么呢?啊,首先说呀,软引用,弱引用,虚引用,包括中间引用的存在呢,会使得咱们Java在整个引用这一块,或者在整个这个使用方面呢,会看着就更加的完备啊就是呃,要什么有什么是吧?诶适合于各种各样的这个实际场景,那么下边这些主要适合什么场景呢?
07:21
咱们呢,其实说用的比较多的,相对来说哈,就是软引用和弱引用,那么大家想刚才呢,提到这个强引用呢,就是说如果我们堆空间中的强引用过多的时候呢,就会出现OM说能不能有这样的一些,呃,这个引用存在说呢,如果说你这个内存空间如果够,哎,大家应该注意听啊,如果这时候内存空间够呢,我这个对象呢,就存在,如果内存空间不够的时候呢,那我就把这个对象呢给它销毁掉。你看这一种场景,咱们强引用是描述不了的,对吧,那么这种场景呢,有没有意义呢。我们说呀,其实也是有意义的,大家呢,直接去想这个缓存就可以了,缓存可以了,各种场景下的缓存,包括呢,咱们作为一个普通用户,你用手机也是一样,你想手机为什么大家以前呢,觉得说手机总卡顿的严重一些,那现在的话呢,感觉会越来越好,因为呢,手机咱们现在这个手机的内存是不是越来越高啊,现在有的都都达到八个G的内存了,对吧?那我们呢,之前打开这些应用呢,就没有及时的把它们清理掉,而是呢把它们缓存起来,当你在打开的时候呢,直接从内存上去调你已经开过的应用,那前面这个速度就更快一些,这个呢就是缓存的一个存在,对吧?那缓存其实就可以用我们这里边提到的软引用和弱引用来描述,那大家想,如果咱们这个内存空间够,诶咱们呢,就不把这些数据呢销毁掉,它就放着,随时呢,你要是用,咱们就不用再去从这个磁盘上重新的再读数据,加载到内存CPU再做运算了,这时候咱们已经在内存里了,是不是直接呢,就。
08:51
点开就打开了,对吧?诶直接呢调CPU做运算就打开了,所以呢,我们加载的速度就更快一些,当然呢,你说我们这时候呢,诶可能内存空间会不够啊,就是哎呀有危险要报这个OM了,但是强云呢,我们就没办法给它销毁,怎么办呀?哎,这个时候呢,咱们就可以把缓存呢给它去清理掉。
09:09
对吧,就是缓存呢,属于这个就是你要是够空间呢,我就存在,哎,让你程序更快,但是你要空间不够呢,那你就把我清理掉,那这呢,我们就可以考虑用这个软引用和弱引用呢,来进行一个刻画,那包括去引用中间引用,哎到时候咱们也给大家做一个介绍,那这儿呢,就是我们谈的这个引用,那么对于引用这一块呢,面试当中应该算是一个比较偏门的高频面试题。你看这里边我用了两个词,第一个叫偏门,因为呢,咱们实际当中99%用的都是强用这种场景很少,但是呢又是比较高频的一道面试题。啊,这就比较恶心,那就相当于是我们,哎可能会功利性的,哎把这块呢,是不是还得相应的要熟悉熟悉,背一背,记一记是吧?哎了解了解,然后在面试当中,哎这个你得能够答出来啊,那整个这一章的话呢,呃,你要说从这个重点上来讲,这块你看我们占的篇幅呢要大一些,那前面的话呢,相对来说啊,就都不是特别难,所以呢,这一章大家相对来说学习起来呢,会比较轻松一些,那接下来咱们就一个一个呢给大家做介绍。
我来说两句