00:00
好,那下面呢,我们就来看一下第一章啊,叫GM和Java体系结构,哎我们看下这一章呢,我们要讲述的主要内容都有哪些?呃,我们这一章的话呢,呃,其实内容分的还是比较细的哈,呃,一共我列了有十个点,呃前沿面案人群和参考书目,Java和呃Java虚拟机的一个简介,呃Java发展的重大事件,当然呢,呃我们看这条视频的同学呢,大部分已经是在做Java开发了啊关于这个重大事件呢,呃,其实你已经在学Java的时候呢,有所了解了,那这块呢,我们比较侧重于就是呃GM这块的一些变化,包括垃圾回收器,乃至于说呢,S公司,奥瑞公司在这个一直到今天,呃JDK13整个历史过程当中的一些重大事件啊,我们给大家介绍一下,下个呢,是关于虚拟机与Java虚拟机的一个这个说明,呃,接下来是GM的一个整体结构,我们说过有分三层对吧?呃,这三层呢,整个贯穿在我们学习GM,呃,上篇内存和垃圾回收的全过。
01:00
程当中啊,然后第七节呢,叫Java代码的一个执行流程啊,这个大家非常不陌生,呃,我们写完Java程序以后呢,直接部署到网络当中,通过前端呢,请求去执行,或者说呢,我们写一个普通的一个呃,Java的一个程序,呃,点右键rise Java application直接呢就跑起来了,那整个在这个过程当中,Java代码是如何从原文件到自件码文件,中间经历了什么,从自件码文件呢到解释运行又经历了什么?这个过程呢?我想绝大部分这个程序员,如果你没有学习过GM的话呢,是不太了解的,当然了,不排除大家这个科班出身是吧,本身呢,就以前学过C语言等等相关的,包括汇编语言,那么你应该是清楚其中的大部分的一个过程的,因为语言很多都是类似的啊,那这呢,我们也带着大家一起重温一下,呃,你要是没有学过的话,那就不叫重温了哈,诶,看一下Java代码的一个执行流程。然后下边呢,是GM的一个架构模型,那我们说的典型的这个,呃,虚拟机的这种架构呢,我们分成两种方式,一种呢叫基于站的一种指定机的架构,一种呢是基于寄存器的一种架构方式,GM呢在这里选择了使用基于站的架构模型,那么它跟寄存器的架构模型有什么区别,各自的优缺点是什么?我们在这里呢进行一个介绍,下一个呢,是一个基本问题,GM呢,它的生命周期啊,凡是在内存层面的东西,我们说都是有生命周期的,当然呢,不管内存层面,我们说的宽泛一点,物理层面的也都有你的一个,呃,可看得见摸得着的一个内存,它的生命周期呢,就是从他制造开始,这就是他的一个出生死亡呢,就是你把它给弄坏了,他就死了,对吧,你要小心这点呢,它的生命周期可能就会长一些,那么在内存层面呢,我们说GM,呃,什么时候出生的,然后呢,执行是什么时候开始的?呃,哪些情况会导致它的结束,这就是它的一个完整的生命周期。
03:00
我们带着大家细致的说明一下,然后最后呢,嗯,这个嗯写的是X,其实是十啊,因为呢一共列了十个点,最后一个点呢,如果用阿拉伯数字呢,就是幺零,这个占两位,所以我这呢就换了一个罗马数字X,其实是十的意思,就跟那个iPhone ten类似啊,那GM的一个发展历程啊,这里边涉及到了我们整个GM,呃历史的迭代过程当中,第一个GM是什么?然后呢,这个目前的主流用的是什么,未来呢,还有哪些正在发展的过程当中,这个呢,我们给大家做一个整体的介绍,好这呢就是我们的一个目录啊,呃,前言呃,这个前面,呃这个上一节当中也已经说到了啊,这个有很多的程序员呃,工程师呃,还有同学在问说商务能不能出一套经典的GM视频,呃,这个今天他来了是吧,还套用了一个比较流行的网络语啊,当然呢,好像我们这么说就似乎呢,这套视频就很经典似的,嗯,当然不一定是吧。
04:00
我们说经典呢,是需要经过时间的迭代洗刷以后,才能够凸显出他的一个经典来,我们只能说呢,这条视频尽可能给大家展现GY的全貌,那同时呢,呃,我希望呢,这个语言还通俗易懂一些,就是不会显得太枯燥啊,是这样子的。好,那首先呢,我们来看一个问题啊,说作为Java工程师的你是不是曾被GM伤害过,有同学说没有啊,没有的话呢,这我应该是恭喜你呢,还应该是替你感觉到惋惜呢,应该都有啊啊那我们来看一下大家在实际开发当中是不是遇到过这样的几个问题,比如说呢,运行着的线上的系统突然卡死啊,系统呢无法访问了,甚至呢,直接报OOM啊,Auto memory内存溢出了,什么原因造成的不清楚是吧?那想解决线上GM的一个G些问题,这些呢,就垃圾回收器的问题无从下手怎么办呢?嗯,不知道怎么去看这C日志是吧?嗯,无从下手,然后新项目上线,对于各种GM的参数的设置呢,一脸茫然,嗯,直接呢就默认吧,然后呢就GG了是吧,就就挂了,或者呢,后边也不知道该如何进行调优。
05:16
然后呢,每次面试之前呢,都需要重新背一遍GMM的一些原理,概念性的东西,然后面试官呢,经常会问你,反而是一些实际应用当中如何进行GM参数的调优,如何解决GC和OM的一些问题,一脸懵逼,说白了就是大家背的这些呢,都是一些理论性的东西,那实际开发当中,我们需要面对具体的场景,需要看你实操的能力啊,那通过这个呢,也也说明了,就是每次你都要重备,因为呢,这个东西你没有实实实操过嘛,所以理论性的东西呢,也是很容易忘的,而经验性的东西呢,一定是通过实操呃产生的,所以呢,我们还是要关注于具体落地该如何去做啊,这个调优这块呢,详细的内容我们是放在第三个篇章当中啊,来给大家讲解,好,这呢是我们说到的一些问题啊,好,然后呢,我们来看这张图,这个图的话,我想必诶很多做Java开发的人员呢,并不陌生,我这呢,其实画的是一个简图了,那使用Java相关的API,我们。
06:16
上层构建了不同的框架啊,这呢我列举出来的是其中的几个,呃,以前呢我们用SSH,后来呢SM,现在呢还可以微服务架构是吧,然后基于这些框架我们去写具体的应用程序啊,当然了,我们说这些应用程序呢,最终还是都在都要运行在我们的GM上的。啊是这样子的对吧,那我们说现在这个Java呢,呃,早已经在呃企业级领域,在互联网领域,在移动领域中间电领域,甚至说在游戏领域啊,都发展的如火如荼啊,这一切呢,肯定都呃离不了我们Java的一个运行支撑系统,这就我们所说的叫Java虚拟机啊,那么我们看下边一句话啊,说大部分的Java成开发人员,除了呢,会在项目当中使用到Java平台相关的啊各种高精尖的技术之外,对Java技术的核心叫Java虚拟机呢,发现了解的是比较少的。
07:15
啊,你看是不是能够跟你产生共鸣啊,呃,我觉得呢,这呢其实也符合我们的一个认知啊,就是没有什么好责备的啊,符合人的认知认知,嗯,比如说呢,呃,我上初中的时候呢,这个我爸给我买了一台电脑啊,其实我当时还是非常非常兴奋的哈,那买了电脑以后,嗯,大家未来的一段时间要干的是什么事呢?呃,开关机之后,那就是在里边装一些软件,包括呢,像办公类的word呀,PPT呀等等,嗯,去学习去使用。对吧?呃,其实都类似于我们说基于这个框架呢,去开发的应用程序,类似于像这个层面的,那有一天呢,我发现呃,这个电脑的硬盘不足啊,我还清晰的记得我的第一台电脑呢,是联想的,当然现在联想还在是吧?啊,很不容易啊啊,那硬盘呢,当时只有十个G硬盘啊,只有十个G,那比如说我的硬盘不足了怎么办呢?那我考虑到的就是我得加一个呃这个硬盘对吧?那这时候呢,我就需要把我的电脑的主机给它打开,打开以后的话呢,我发现哦,原来是在这个位置插硬盘的,这个位置叫内存,这个位置叫CPU,然后呢,诶不自觉的我就开始研究它的,呃硬件的这个层面了,那说白了就是我们开始像刚才写的程序一样开始去研究,呃,它的底层的GM了。
08:38
啊,有点有点这个意思对吧?呃,那再举个例子,呃,比如说上初中的时候呢,我去学校,学校骑自行车去,那刚开始的时候肯定不会骑自行车嘛,那就需要学骑自行车啊,骑自行车会了以后呢,诶开始看别人呢,这个两个手不放车把上呢也能骑,诶自己呢,觉得挺帅的,自己也开始学,其实这些呢,都可以看成是基于我们,呃,有了这个Java语言,有了你骑自行车的技能以后呢,你开始学上层的一些高级的一些框架,来解决你实际这个骑车的过程当中的一些具体的问题啊,一些技巧性的东西,对吧。
09:14
但是有一天的话呢,自行车坏了,那自行车坏了的话呢,要么就是你去找这个修自行车的这个店帮你修,那要不就是你自己修,那要是自己修,其实就类似于我们开始去研究呃自行车的一个呃原理是吧,到底哪坏了,怎么去解决?呃涉及到具体的一个螺丝的问题了,其实就有点偏向于我们说的,诶GM的底层啊,那只不过呢是由于咱们在实际开发当中,呃,尤其我们说这个技术,现在这个迭代很快哈,层出不穷,很多程序员呢,在上层这块呢,就已经耗费了自己绝大部分的精力了啊,这个使用不断迭代出新的一些新的框架啊,当然呢,框架呢,呃,这个像微服务框架,前几年出现的,但是整体来讲,现在Java的体系的技术还是比较,嗯,比较规范了,就是太多的新技术呢,还不像说这个前一年前两年的大数据一样啊,这个技术不断的去迭代,呃,Java呢,现在整体上是比较稳定的啊,应该这么讲。
10:14
但是呢,程序员又会陷入到具体的业务逻辑当中啊,面对不同纷繁复杂的这个项目的业务,然后陷进去了,所以始终没有更多的精力呢,哎,来,抬这个起来去看一看这个GM。就像刚才我说的买的电脑一样,那你始终呢,是在这个电脑的软件层面呢,去做任何的操作,那电脑硬盘不够怎么办呢?我直接换一台电脑对吧?那自行车坏了怎么办呢?我也不研究怎么去修,我直接再买一台新的自行车,新新的一辆自行车可不可以呢?可以啊,所以呢,我们解决问题呢,其实有很多种方式是吧,但是呢,还是回过来,我们要不要去了解GM,我们说呢,还是有必要的。对吧?好,那我们再来看一下这个里边写的哈,说开发人员如何看待上层框架,你看是不是跟你能够产生一些共鸣啊,说一些有一定工作经验的,这个开发人员打心眼里觉得SSM、微服务等上层技术才是重点,那基础技术呢,并不重要,说这其实是一种本末倒置的病态。
11:22
呃,这里边我们默认一个情况啊,就是咱们把现在要讲的这个事呢,称作叫病态了,首先你得认可这个事,你要觉得说我没病,嗯,那好吧,那这套视频其实大家可以直接关掉呢,你去接着研究那个问题就行了是吧?呃,你要认可有病了,我们才能讲下边的内容,要不就没法讲了是吧?哎,就跟说你去呃医院,你找到医生,呃医生说哪里不舒服,你说我没病啊,那医生呢,估计就特别想冒出三个字母啊ju是吧,不好办了。呃,要么呢,就是病的不轻啊,就这两种情况对吧?那首先呢,你得认可,呃,这是一种病态,对吧?啊,这是我们说的第一个问题啊。
12:04
那如果我们把这个核心的类库的API比作是数学公式的话啊,核心API比作数学公式的话,那么Java虚拟机的知识就好比是公式的一个推导过程啊,就是它是呃更底层的一些,呃内层的一些能力啊,这个大家呢,可能看过这个金庸的这个小说是吧?呃,金庸小说里边呃典型的应该是算有两部对吧?呃一部呢是笑傲江湖,笑傲江湖里边呢是令狐冲,呃尽管呢,独孤九剑看上去的非常的炫酷是吧?但是由于这个本身的内功修炼,你要是不够的话呢,与敌人对抗的时候,其实呃也撑不了几个回合,那这个内功的话呢,其实就好比我们现在要说的这个GM。再一个呢就是,呃,这叫倚天屠龙记啊,里边呢,像张无忌练的这个九阳神功是吧,九阳神功呢,其实也是偏向于内层的啊,这个功力啊,内层的这个呢,其实就好比是我们对GM更熟悉一样啊,那在举一个我们开发中的一个例子哈,呃,最近的几年大家也看到人工智能这个如火如荼啊,很多人包括是一些行业外的小白都开始想进入这个人工智能营业厅,很高大上啊。呃,如果大家用咱们说一个叫CN叫卷积神经网络,呃,你用CN呢,如果去想实现一个图片识别,或者我们说做一个简单的分类吧,比如我们看到一个图片呢,像分类它到底是裤子还是衬衣,还是短袖还是短裤等等,那我们可以用一个CN啊卷积神经网络做一个简单的一个分类,那如果你要是用代码实现的话呢,其实嗯,可以说不超过十行代码,大家就可以做到这个事情。
13:44
啊,是可以这样做到的,当然这十行代码当中涉涉及到一些方法参数的填写,那你为什么要填这个参数,为什么不填另外一个参数,不同的参数是什么意思,有什么区别,这其实就涉及到底层的问题了。啊,如果你仅仅会用的话呢,那没问题,那就去学这些上层的框架,那如果你想更深入啊,想真正的弄明白,或者真正的能够产生价值啊,如果仅仅你是写几行代码的话呢,在企业里边其实你是开不到高工资的,对吧?那人工智能,呃,我们看到现在这个在企业里边顶级的这些人在做的,他其实都是学历相对来讲比较高的啊,他经过扎实的一个数理的培训啊,最起码像我刚才说的这九行十行代码,呃,你得需要有像线性代数里边的矩阵,像概率论里边的各种各样的这个分布和它的特征值,包括统计里边的,像这个时间序列分析啊,线性回归是吧,这都属于基本内容啊,你都需要掌握了以后,你才能够去学这些高大上的人工智能啊,卷积神经网络等等这些知识它才有意义是吧。
14:54
呃,聊的稍微多了一些啊呃,然后呢,我们再来看这个图,哎,来看这个图啊,这个图呢,我们想说明的一点是什么呢?就是呃,咱们呢,现在开发大家用的语言呢,其实都是高级语言,那像之前的话呢,大学如果你是学计算机的,还会要学一门叫做汇编语言啊,那当然汇编语言其实学起来要比这个高级语言,像C语言这都算高级语言啊,要枯燥一些了。
15:23
但是我们说这个计算机其实本身呢,是不识别高级语言的啊,再说一遍啊,计算机本身其实是不识别高级语言的,那也就是说我们写的Java程序也好,C程序也好,Go语言也好,Python语言也好,它其实呢,需要经历这样一个过程,高级语言呢,需要呢,经过诶我们的解释编译是吧,需要把它编译成对应的汇编语言,那汇编语言的话呢,再向下转,转化成我们说的0101这样的机器指令,然后被我们操作系统以及CPU呢去呃运行呃,这是才可以的。
16:01
那应该说呢,计算机体系离咱们越来越远了,就是大家呢,现在呢,关注于底层这些情况呢,是越来越少了,我们更多呢,还是在高级语言及他之上的一些应用,花费了我们绝大部分的精力啊,那在不了解底层实现方式的前提下,呃,咱们通过这个高级语言呢,其实是很容易的去写出相应的一些程序的。对吧?哎,这是没有问题的啊,但是我们还要不要去了解这些知识呢?嗯,还是那个问题是有必要的是吧?呃,包括大家如果你想读计算机的研究生的话呢,你会发现呢,计算机在统考的时候呢,就考专业课考,呃专业课分两个啊,一个呢是数学,对吧?那除了数学之外呢,另外一门专业,专业课它要考四门课程,分别呢,是组成原理,是偏硬件的啊操作系统。呃,数据结构呃计算机网络,呃,你会发现呢,在呃考的这四门课里边,是没有任何一个跟高级语言相关的,他不会考具体的语言的,对吧?当然呢,都是考的,呃,你作为一个呃专业性的人才,需要懂得最基本的几门非常重要的课程啊,可见呢,这个基本功其实我们讲也是非常重要的,对吧?
17:16
好,下一个呢,我们这里边想要探讨的就是,呃,架构师每天都在思考什么,呃,架构师每天都在思考什么?嗯,第一个就是应该如何让我的系统啊变得更快,诶下个呢,就是如何避免系统出现瓶颈。啊,这是我们说比较关心的两个问题啊,呃也有同学呢,就是从咱们上古五毕业的这个刚开始工作当然都比较紧张了是吧?呃具体的应用啊,或者企业的实际问题呢,会陷进去去解决,那有了一两年开发经验以后呢,呃有的同学呢,就给我发信息,感觉呢会有一些迷茫啊,因为现在公司呢,呃待遇呢也稍微涨了一些,涨了一些之后呢,呃每天呢,现到具体的企业业务当中啊,用的一些技术啊,框架呀,呃也都算比较熟悉了,甚至呢,在呃商务学的一些框架在企业里边还没有应用的上是吧,在项目里面有体现,呃这个出于对未来的一个担忧,不知道自己该如何继续精进自己的技术,才能够还更上一层楼,那这儿呢,我们说是架构师要考虑的问题,那那作为你来讲,呃,说怎么能够未来,比如说达到薪资不断的往上涨,应该具备哪些技能,在哪些方向去使劲呢?其实这个事很简单。
18:37
大家呢,你只需要打开比如拉钩网,或者叫boss直聘,然后呢,你就直接输入你想达到的一个薪资范围,你想达到50万也好,80万也好,百万年薪也好,那你看一下这样的职位要求当中的这个技能啊,他都需要具备哪些方面的这个技能其实是很容易的能够知道你应该在哪方面呢,进行一些精进的啊,比如说呢,在知乎上我这放了一个帖子,说如何看待招聘信息直通年薪50万。
19:10
说你50万的人需要具备哪些技能,诶,大家也可以看看自己是不是能够达到啊,参与现有系统的性能优化啊,重构,保证平台性能的稳定性啊,根据具体业务场景的需求,决定技术的方向,做技术选型啊,这是一个架构式的一个基本的要求啊呃,能够独立的架构和设计,海量数据下高并发分布式解决方案,满足功能和非功能的需求等等啊,解决性能的性能的一个系统性能的一个瓶颈等等啊呃,说白了呢,就是要想达到年薪50万,乃至于说更高,嗯,大家要求不仅仅需要掌握基本的技术站啊,你还需要有完整的这叫大流量系统的完整架构能力和解决实际问题的能力。嗯,就是你不能指望着说我们这个性能提升,呃,就单纯的靠增加物理机,这是一个非常笨的办法啊,当然呢,屡试不爽对吧?呃,那更多的情况下呢,我们应该是看在现有的这个呃,性能的性这个指标的情况下,如何更好的去调优解决我们的性能瓶颈啊,这是我们要说的这个点。
我来说两句