00:00
好,那各位同学在进入GVM和GC的这个知识讲解的过程当中,我们先简单的用最快的速度十多分钟复习一下前面我们讲过些什么东东。首先。不管怎么说GVM的内存结构,那么大家呢,一定要整明白,那么这个是我们反复强调过的,那么也就是说你来现在进入到我这个阶段,前面我PPT脑图打开过的那些知识,基本上你是要听过一下的,那么换句话说,现在这些干嘛?一半是新的题目,我们继续加深,另外一半是我们的什么复习,因为大部分我们都讲过,但是深度上继续给同学们加强和加深。那么首先映入眼帘的,那么最熟悉的。GVM的体系结构,那么不多废话,给同学们半分钟再复习一下。好,那我们说过了。
01:02
来装在起简单复习来装在起什么意思?装载什么,有哪些类装载器,对吧,那么都明白。启动类加载器,也就是我们的跟加载器,是不是用C加加语言写的那个bootrap,然后什么拓展类加载器,然后是我们的应用类加载器,当然你可以。继承classlo这个抽象类,然后呢自己去自定义一个加载器,那么细致来分的话,类的加载器呢,主要呢是有什么四种,粗分的话呢,是三种是吧,跟子启动的跟启动加载器,拓展加载器和什么应用加载器,那么好类的加载器它主要会考大家一些什么东东,以前我们讲经时说过,主要是不是考什么类的加载器。是什么?第二个双亲委派机制,第三一个Java的。内加载的过程当中的沙箱安全机制等等,那么这个呢,都给大家呢,详细的说过。
02:03
好,那么这三个灰色我们讲过了,什么意思啊,县城私有几乎不存在垃圾回收,这两个亮色什么意思啊,那么也就是线程公有大概率的话,GC就是跟他们两个有关系,好,这是我们的GVM的复习,那么我们本次全部的讲解。均是以JAVA8为例。老师在。基于M的讲课当中,杨哥专门详细的讲解了JAVA7JAVA8它们的区别,那么我们呢,都明白,对于我们的堆内存而言,有伊甸园区,幸存者零区,幸存者一区。养老区。七以前叫永久带八,那么已经是什么matepace云空间,那么专门还带着大家看了官网,为什么JAVA8要把它改成这个,按照open gd k GP gps122的文档说明,那motivation动机这个部分呢,主要是接orac口,收购了上公司和B公司以后有两套。
03:09
这个JDK的规范,那么一个是接rocket,一个呢是或port,然后他们混合整了以后呢,就把。Pace给干掉,然后呢,呃,就把这个。永久的permanent呢给干掉,变成了我们的JAVA8的mepace空间,这些呢都说过,那么再给大家简单的粗略的复习一下,那么接下来我们呢,说过了这个GC的作用句就跟刚才讲过那句话一般,GC亮色部分,线程共享部分需要有。垃圾回收,然后呢,我们说过了,这个常见的垃圾回收算法,主要呢。粗分有四种,也是主流的,这四种垃圾回收算法分别是引用、计数、复制。标记清楚,标记整理,那么。快快的复习一下,那么引用计数讲过了,有对象引用加个一,没对象引用减个一,到零为止,说明回收。
04:09
但是呢,它有个天生的缺陷是较难处理循环引用的问题,所以说GVM实现一般不采用引用计数法,那么这个你了解有这么一种算法就行,因为它这个那个双端循环这个问题的话呢,互相引用的时候呢,特别容易呢报错,那么目前呢,已经没有人用了,但是面试中可能会问,看你系统的这个知识是否全面和系统。那么好,第一个引用计数。第二个那么复制算法,那么复制算法那么呢,在哪个区用啊,同学们回答我OK,那么是不是我们的年轻代。那么好,这个复制算法,那么经典名言,那么就是。复制之后有交换,谁空谁是错,那么彻彻底底给大家讲解并说明过这个内容,这个内容也非常的重要。
05:07
那其实呢,同学们都明白,这个复制算法,说穿了其实就是我们这儿的这两个箭头。SURVIVE01又叫什么?幸存者零区和幸存者一区,他们两个产生GC之后,他们两个呢,是会交换的。S0区又叫芙蓉区,S1区又叫兔区,他们两个的角色是会互换,那么这个呢,我们反复强调过,那么所以说我们的复制算法,那么大家都明白,简单而言就是复制清空互换,那么呢,这个。详细的给大家杨哥呢,新版的这个GPM呢,都给大家说过,那么呢,给大家半分钟咱们再复习一下。好,那复制算法我们就给大家呢,说到这儿讨论到这儿,那么也讲过了,它的优点呢,就是什么没有产生。内存碎片,因为整体复制嘛,缺点呢就是有点浪费空间,而且尤其是有一些大对象复制起来呢,也会耗时。
06:07
好,那么复制算法完了以后,我们衍生出了第三种算法。Mark swap。那么这个markwap这个算法呢,就是标记清除,那么言下之意就是两步,先标记后清除。没问题吧,那么二话不说我不打开,那么同学们想一想优缺点是什么?什么优优点我们干嘛?这个时候对象的标记是不是没有大面积的去复制,节约了内存空间,但是坏处就是什么?就像一堵墙一样,各种去标记,然后再清除,好比一个人的一口牙给敲坏了,那么这时候他最大的问题是产生了内存碎片。那么呢,我们呢,分两步。第一步是什么?Mark标记,那么第二步是清除,那么呢?第一种,先要标记出什么药物回收的对象,然后呢再统一回收这些对象,那么大家可以看黑色的是可回收的,蓝色存活,白色是未使用的空间,那么这个时候。
07:13
Lawyer。乱七八糟的,就像磁盘碎片一样。那么这个时候干嘛将会导致。我们呢,标记。回收的对象以后。两步回收前回收后最大的问题就是导致了什么内存碎片好,那么在标记清除的基础上,我们的进一步优化完成了标记清除整理,那么简称叫标记整理,你不说我有碎片吗?那么我把碎片的这个问题去掉,那么可能就会好,那么OK,那么呢跟我们的什么。前面一样,第一步标记,第二步干嘛再扫描并往一端滑动,那么言下之意,没有了碎片。换句话说,以前那些碎片都。抖一头的了,好,那么。最烦的就是要要付出代价,移动对象需要成本,那么言下之意,这三种算法呢?
08:05
干嘛主主流的这三种哈,各有优缺点。那么最终。复制算法用在新声代,这两个呢,用于老生代多一些,那么这个呢是既不浪费空间,又不产生碎片,但是呢耗时间又比较多,所以说没有完美的算法,最终我们讲过。具体哪一代用哪一种算法,那么干嘛,什么情况就对症下药,最终聊了一个东东叫分带收集,好,那么这个就是我们前面GM和GC的前提。知识的一点简单的串讲和复习。那么同学们。记忆上想起来,那么我们接下来可就真刀真枪的。来看看大厂考什么那?坦白讲吧,就是说以前就懂一个GVM的内存结构图,你就能找工作了,但是现在这些远远不够好,那么同学们,红牛咖啡喝一下。
09:07
咱们呢,继续往上再接再站。
我来说两句