00:00
大家好,我是商务的讲师宋康,那从今天开始啊,咱们给大家来讲解一下这个GM的中篇啊,那之前的话呢,咱们花了一定的时间和篇幅呢,给大家来讲解,呃,GM的这个上篇上面呢,咱们主要讲解的啊是GM关于内存的结构和分配上。啊,以及呢,垃圾回收算法,垃圾回收器啊,这个上边呢,应该说是非常重的一个章节啊,或者一个篇章啊,那如果说呢,关于上边这块大家还没有及时的学习的,诶你可以呢在登录啊,一方面呢,大家可以去商务的官网,哎,官网这块呢,咱们有这个视频下载。视频下载呢,在Java这个学科下边,哎,我们能看到啊GM的这样一个课程。哎,大家呢,可以在商务的官网哎来看,或者的话呢,哎,大家呢,也可以去登录这个叫诶哔哩哔哩啊,现在呢,就是央视啊推荐的一个学习的网站啊,在这里边呢,大家去输入这个GM,那一般情况下呢,排第一的啊,应该就是咱们之前录的这个上片啊,从这个点击量来讲的话呢,也是GM里边点击量最大的啊,大家呢,可以在这儿啊进行一个学习,咱们刚才已经说过了,上边我们重心讲解的是内存啊,内存的一个结构,内存的一个数据的分配,包括呢垃圾回收算法,垃圾回收器啊相关的一些内容。
01:17
那通常学习GM的同学呢,一般都是做过Java相关的一些开发了啊,当然也有同学呢,学完Java基础呢,就想诶更深一步的去理解Java的底层结构,那也可以呢,提前进行一个GM的一个学习,那总之的话呢,就是呃,从面试的角度来看,GM呢问的比较多的啊,集中在这个内存这块啊,这个垃圾回收算法这块,比例呢,还是比较大的啊,比例比较大的好,这呢是我们说的这个上品。那由于前段时间呢一直在上课,所以很多同学呢一直在网上也在呃催促我这块呢赶紧呢来录这个中篇啊,中音的这个中篇呢就呈现给大家,那这呢就是我们开始中间的一个学习,这里边呢是分成了这样的五个部分啊,五个部分呢,呃,第一部分呢叫课件。
02:00
这个课件的话呢,在上篇用的是PPT,那中篇的话呢,考虑到咱们这个字节码的相关的一些这个指令啊,非常具有这种层次感,所以这里边儿呢,我觉得呃,用这个思维导图给大家呢,来呈现效果呢会更好一些,这个大家呢,能够更清晰的看到它整体的一个结构脉络,所以这儿呢,诶课件我们选择用这个思维导图,这是其一,那我们第二章呢,叫词解码与类的加载篇,相较于咱们说的这个上篇来说,哎,重点的内容就比较少一些。哎,相交于上面演讲,我们这里边儿呢,主要给大家讲解四个章节,第一个章节呢,叫class文件结构。第二呢,叫做自解码指令集与解析的举例,第三呢叫类的加载过程详解啊,第四个部分呢,叫再谈类的加载器,这个呢,咱们在上篇当中,实际上呢,关于类的加载器,类的加载过程也做了一定程度的说明,便于呢咱们再去理解这个内存结构嘛啊那么我们这个中点呢,其实重点呢,就定位到自解码文件这块,以及呢,使用自解码文件,那就是类的加载器啊,以及呢就是以类的加载器为代表的整个类的加载过程。
03:10
啊,这呢是我们这个中篇讲解的一个核心,好,那首先的话呢,我们来看一下这个,诶class文件。啊,文件结构也是我们这个第一章啊,第一章的话呢,我们首先呢,来也进行一个简单的一个回顾啊。这张图的话呢,应该对所有的同学来讲呢,都不陌生,这呢是咱们这个houseboard虚拟机啊,一个架构图。啊,一个架构图,那这张图呢,就是我们在上篇当中给大家画了很多的图,对吧?啊,如果有印象的话呢,应该都还记得,包括这些图的话呢,也都在这个网站上给大家都做了一个这个发布啊大家呢,如果不清楚的话呢,可以问一下商务的咱们的一些这个。诶在官网上这块做一个咨询是吧,诶这块呢,就都能拿到这些图啊,这个咱们上边呢,一共是有哎50张图吧,哎,这个全部都给大家那个发放出去了啊,大家都可以呢去下载,那么这么多图当中,这个最先需要大家能够自己画出来,或者你脑子当中这个能够体现出来的,那就是这张图。
04:10
啊,B折线也得能够给它画出来啊,这个是非常重要的,那么在这张图当中,我们能够清晰的看到GM的一个整体的组成部分,那它的起始点的话呢,叫做类加载器。哎,叫做class loader啊,那么粒代加载器呢,它的呃,入口这块,或者我们说呢,得有原材料嘛,这个原材料是什么呢?就是我们称为那叫class最基码文件。就是我们写的Java源程序呢,原文件呢,经过javac编译之后呢,生成的这叫自建码文件,那这个自建码文件呢,有点像咱们Java中方法的行参一样啊,属于呢是咱们叫原材料啊,那使用类的加载器呢,将这个自己文件啊分配加载到我们这个内存空间当中,那这呢,也是我们上篇讲的重点之一啊,内存结构。那对于houseport虚拟来讲呢,我们说内存结构一共分成了五部分,对吧?哎,非常清晰啊,这个常规接收器,本地方法站,虚站,这个呢是每一个县城一份。
05:06
那以及呢,一个进程当中的多个线程共享的堆合方法区,那堆合方法区呢,也是我们进行调约的一个关键部分啊,这个咱们都已经说过了,那以及呢,我们这个直引引擎当中的a jc啊,这个garbage collector啊,垃圾回收器,包括相关的一些回收算法,这个也都是我们需要关注和掌握的啊,这是咱们要讲解的这个中心,OK,那咱们中篇呢,讲的点是什么呢?哎,中篇这块呢,咱们主要集中在这一块。对吧,那集中在这块,呃,我们呢,需要知道这个次解码文件里边都有什么。啊,一点点这个信息咱们知道呢,你想想我们Java程序呢,你编译之后呢,生成的叫自解码文件啊,你这个程序呢,能解释执行,它都是使用的我们自解码文件,那自解码文件里边到底都记录了哪些信息呢?对吧,啊,那这些信息的话呢,是怎么一点点加载到我们内存当中的呢,对于我们需要关注于底层的同学来讲呢,哎,那就是我们需要关注的一个重点。
06:05
啊,所以这儿呢,是我们中篇呢,重点给大家讲解的,那中篇讲完之后呢,大家会发现,那好像从这个奥斯虚尼的这个角度来讲,这个上边这块说了,中间这块呢,诶,像执行引擎里边这个JC啊,垃气回收器啊,这个我们也讲到了,对吧?那整个来看的话呢,Hot虚机好像要讲的就完了,那我们为什么还要讲下天呢。啊,咱们知道这个下边呢,咱们要讲解的叫做类的,哎,不是这了啊。咱们下边呢,要讲解的叫性能监控与调片啊,这个怎么看待呢?那我们再看这张图,这张图的话呢,咱们在讲上篇的时候呢,带着大家稍微看过一下啊,这呢也是啊,我在准备这个GM这个课程的时候啊,看了大量的这个书啊,包括网上的这种帖子,包括实际开发中的这个经验结合在一起。啊,然后呢,给画了一张这个图,这张图的话呢,我觉得是非常有必要的啊,因为看到了很多的这个书啊,这个整理的这个目录结构实际上是并不清晰的啊,尤其是对于这个初初初学者是吧,就是刚开始接触这个障碍虚拟的同学来讲呢,就是呃,随便你拿到一本GM这个书的话呢,就感觉很懵啊,它这个结构设计的不是特别好。
07:16
啊,那这呢,我们就非常清晰的捋顺了这个整体的一个思路啊,应该这么讲,我们学习Java虚拟机。啊,功利点来说的话呢,或者浅薄点来说,我们是为了这个在面试当中,尤其大家去应聘高级工程师架构师是吧?哎,这个时候呢,GM呢,是我们必然要问到的一块内容,而且呢,问到的这个比例是不低的,那为什么要问到这个GM呢?主要我们关心的点呢,是下边这两块,一个呢叫做性能监控,一个呢叫做性能优化。当然了,这个性能优化呢,除了我们GM层面做一些优化之外呢,还有一些其他的方面啊,这两块呢,实际上是我们最为关心的。啊,那大家你想一想,我们一个企业级的一个项目或者一个系统,我们上线之后的话呢,那隔段时间就报了一个OM,那这肯定是不行的,对吧,我们需要及时监控这个项目的一个运行的状况,以及呢,针对于我们的一个监控的一个数据情况呢,进行必要的一些性能的优化,啊性能的一个调优,这呢是我们最终可以产生价值。
08:16
实际生产价值的地方对吧,但是我们呢,要讲解或者学习的话呢,哎,不能够,呃直接奔着这块去啊,要想能够对这块呢,有一个更深入的一个理解啊,因为咱们比如说像性能优化,那涉及到了垃圾回收相关的一些,呃,相关器这个回收器的一些选择上,对吧,那你就得需要呢,呃对内存结构呢,有比较清晰的一个理解,因为很多参数呢,都是用来调节啊这个内存的这个。啊,相应的这个内存的大小和分配的比率的,对吧,那也就是我们上面当中大家需要学习的内存的结构与分配啊,那我们上面也讲解了相关一些回收算法,包括呢,我们在讲解垃圾回收器的时候呢,实际上也涉及到了一些调用的一些手段,只不过呢,当时咱们的角度呢,是以垃圾回收器的角度来说的,那我们讲到这个性能优化的时候呢,那就以性能优化的这个角度呢,通篇我们进行一个梳理。
09:08
好,这是我们这个上篇讲解的,那中篇呢,咱们这块讲到的话呢,就主要是关于这个class文件结构和类的加载器,包括这个执行引擎,我们在上面呢,其实也给大家讲到了一部分,对吧?哎,关于这个C1啊C2啊,这个呃是吧,呃,还包括呢,我们说这个GI编译器啊等等,这个我们在上面呢,其也都给大家提到过啊。这个呢是我们整个要讲解的这个过程,咱们的最终目的呢,实际上是要做的是它上面呢,都是我们的这些储备啊,这是上篇啊,当然包括这个啊,这是咱们这个中篇啊做的这个事情。啊,像这个前段时间呢,咱们国内顶级的这个超算中心啊,具体是哪个单位我就不说了啊呃,然后邀请我这块呢,是做一次这个GM的一次讲座哈,呃,大概几天时间来给他们这块呢,主要是做这个测试工程师来讲解一下GM这个课程,呃,在这个课程他们的要求上呢,其实主要讲的就是这块内容。
10:03
性能的监控和性能的优化啊,主要呢是这块内容,但是这块内容当中呢,我们知道优化肯定是涉及到内存的一些分配的参数的设置,包括垃圾回收器的一些选择,所以呢,呃,这两块内容呢,也要有机的补充过去,当然是以性能优化的角度来看待这个内存分配和哎垃圾回收的。那给他们在讲的过程当中啊,实际上是不需要谈这一部分内容的。啊,为什么这么讲呢?因为主要呢,给他们做的呢,是诶测试工程师。啊,是给这个测试工程师,当然呢,他们其实一说是测试,但是他们其实学历并不低啊,在国内的这个呃,顶级的超算中心啊,这个他们的水平啊,很多也都是硕士,甚至这个学历更高啊,这个呃,测试工程师讲的话呢,他们更多的关注的是这些指标,然后以及呢,如何进行一个优化,他们不太关注于这个Java代码这个层面,我该怎么去写啊,因为他们本身呢,其实不涉及到这个Java代码的一个编写工作,所以呢,哎,他们就不太过多的来关注于这个诶class文件的这个结构。
11:06
那现在呢,咱们学习GM的这些同学呢,应该说主体上都是呃Java工程师,那Java工程师的话呢,我们还是非常有必要啊去学习一下这个诶克class文件结构的啊为什么这么讲呢?诶这块的话,哎,我提到两个原因啊,这也是咱们之后诶这个马上呢给大家去讲解的这两个原因,诶通过这个的话呢,大家能够看到我们学习对于Java工程师来讲啊,学习拉层件结构,包括类的加载器类的加载过程啊是非常有必要的。当然了,在功利点来说,在这一部分呢,也融合了很多大厂的面试题,最起码大家也得需要掌握,那这些题目的话呢,也融合在咱们这个讲解的内容当中。这呢就是咱们对于中篇的话一个简单概述。
我来说两句