00:00
好,那接下来我们对Java语言和GM呢进行一个简介哈,虽然大家已经比较清楚了,那这里边我们还是需要明确几个问题哈,呃,那首先呢,关于Java语言,呃有一呃这个所有的语言的话呢,我们说有一个呃比较权威的网站叫做tobe,每个月呢都会更新当月的语言热度排行榜啊这呢我附有它相关的这个链接,大家去百度上来搜索都能够找得到,这儿呢是我放的最新最近的最近的这样的一个这个排行榜,呃是到2020年的一月份,那和去年的一月份相比呢,就是目前Java仍然排居在第一位啊,这个我们已经呃看的习惯了,对吧?然后排第二位呢,仍然是C语言,但我们也看到相较于去年同期呢,呃,它的涨幅还是比较高的,那类似的这个Java的话呢,就会往下有所下降啊,这个图呢,大家多少都见过啊,那这呢,我们其实想说明两个问题哈,第一个问题的话呢,就是这个C语言,我们看到它还是有涨幅的,呃,C语言呢,虽然说出现的比较早了,呃,占据着。
01:00
像系统软件,包括嵌入式系统,呃,大部分的这个市场份额,而且的话呢,它随着现在我们说叫物联网啊,IOT和呃大量发布的这种小型智能设备,嗯的出现啊,这个C语言的话呢,还是有它相应的这个增长力的啊,这也是我们能看到它现在这个在在往上涨的一个原因,呃,但是呢,在可见的未来呢,应该还不会去挑战Java的第一的位置啊,这是这个情况,呃,那我们这个有一句话啊,适合于我们这个做开发的人员,就是说世界上没有最好的语言,我们只讲说适用于具体应用场景的编程语言,对吧?呃,没有最好的语言,但有时候我们经常会探讨谁是世界上最美的语言啊,那PP的话这块首当其冲是吧?啊,我经常笑了啊,那为什么笑呢?嗯,你再回过来我们来说一说这个Java语言,Java呢始终排位第一啊,我们已经非常适应了哈,嗯,但是呢,我们每隔一段时间呢,就能看到网上呃来传说叉叉语言,这个未来呢,可能会取代Java啊这样的一些新闻,呃,这里边这个叉叉呢,比如说有Colin,有呃go语言,有Python语言,有GS语言等等,呃,我想呢,这大概是长期占据编程语言排行榜第一位的烦恼,呃,天下第一呢,总免不了挑战者相伴,对吧?这个我们在武侠里边已经看了很多了啊,这个Java呢,天下第一的底气呢,其实并不在于说Java的语法有多么的先进啊,其实主要呢,是来自于Java它庞大的用户群和极其成熟的呃这个软件生态是吧?这其实不是在朝夕之间呢就能够被撼动的,呃,像我们刚才提到的这个几个语言,比如说呃,GS是吧,我们说互联网,至于GS啊,人工智能呢,基于Python,呃,微服务呢,呃,至于这个。
02:49
这个go语言等等,其实大家都很清楚啊,不太可能说哪一门语言呢,能够在每一个领域当中都占据优势啊,只能说呢,Java呢,是距离这个目标最近的人选而已啊,呃,刚才也提到了,说Java呢,是这个应用比较广泛的一个软件开发平台啊,是我们说这个在每个领域都占据优势,它只能说是最靠近的一个,那现在呢,Java我们最简单来概括的话呢,它呃已经是可以作为一个平台出现,作为一种文化出现啊,作为一个社区出现,作为平台的话呢,我们说这里边Java虚拟机扮演着举足轻重的作用。
03:25
哎,这也是我们一会儿呢想要强调的这个问题,呃第二点的话呢,是作为一种文化啊,说Java呢,几乎成了开源的代名词,呃一方面呢,是基于Java的第三方开源框架啊,非常的多,哎,Tomcats my be spring等等,哎,我们用到的很多软件其实都是开源的啊嗯,另外的话呢,就是基于JDK和GM本身呢,我们说也有不少开源的实现啊,比如说像呃,原来我们说叫S公司,现在是Oracle哈,Oracle现在发布的JDK呢,嗯,有两个版本啊,一个呢是open jdk版本,一个呢是Oracle JD版本,然后呢,号称两个版本所用的类库呢是一样的啊,只不过他们基于是不同的协议,呃,以及呢,它这个,呃,比如说你要再想更新的话呢,呃,你可能需要这个这个付费了是吧,就商业化的用Oracle这一些版本啊,但是正常的类库的话呢,其实他们两个号称是一样的啊嗯,然后另外呢,像开源的GM诶我们看到的阿。
04:25
霸旗下的这个harmony,嗯,主要呢,是由IBM和英特尔呢主导这个研发的啊,就是开源的JDK和JM啊是开源的代名词,那作为社区的话呢,说Java拥有全世界最多的技术拥护者和开源社区支持,那社区非常活跃,或者呢可以理解成是最活跃的社区,像谷歌当年安卓的出现,为了能够吸引Java这个,呃,能够尽快的建立起安卓的这一套应用的生态啊,就吸引Java程序员呢进入,那我们也当时把Java呢作为主流的开发安卓的一门语言。啊,这是我们说的这个Java的这个生态啊,那通常我们一说到Java的话呢,呃,就是提到它的特点叫做跨平台的语言啊,体现它的叫跨平台性,这里边有一句话呢,所所有的人应该都听说过哈,叫right ones run anywhere啊一次编译到处运行。
05:17
这个图的话呢,这我又重画的一个啊,大家也并不陌生,我们编写的Java程序呢,是1.java结尾的原文件,诶然后呢,经过编译以后啊,生成叫自解码文件,然后自解码文件呢,我们可以在啊不同的平台上去解释运行啊这个我们针对于不同的平台所谓的操作系统去安装不同版本的GM啊,那GM呢,都可以去解释运行,我们刚才提到的呃,叫资金码文件。啊,属于这个情况啊,那我们其实不用担心这个生成的自解码文件呢,它的一个兼容性哈,不用考虑兼容性,因为所有的Java虚拟机呢,都全部遵守,呃,GM这个Java虚拟机的一个规范。
06:02
啊,全部遵循这个规范,呃,那么呃都可以去解释运行我们的,呃这个。这个Java文件生成的这个资码文件啊,也就是说这个资源文件本身它其实就具有跨平台性。啊,是这样原因啊好,这是我们说的这个Java源本身,然后呢,下一个问题我们来说一说Java虚拟机,那提到Java虚拟机,我们这个追本溯源最先介绍的话呢,那我们肯定是从官方的文档,那这呢,我们就看来来看这个JAVA8的这个文档,呃,JAVA8文档我们在这个1.2呢,就提到了Java虚拟机,诶打开以后,呃,关于它呢,有一段描述字稍微有点小啊,放大一点。好,我们来看一下这段描述啊,说Java虚拟机啊,Is the cornerstone of the Java platform是Java平台的cornerstone基石啊,这是给他一个很高的定位啊,嗯,它是这个组成部分,嗯,是这个技术的一个组成部分啊,是我们整个Java技术的一个组成部分,嗯,他主要来负责硬件和operating system操作系统的一个独立性。
07:12
啊,主要来负责硬件和操作系统的独立性,嗯,以及呢,负责嗯它的编译后文件的一个小尺寸啊,也是我们所谓的字节码文件哈,嗯,所谓的这个小尺寸的话呢,嗯,举个例子,就是我们在一个程序当中,比如说你用到了string了,用到了像基本数据类型这些这个变量了,你还用到了其他的一些类啊等等,呃,其实呢,我们真正在编译以后的自己码文件呢,都对应的一个叫常量池,运行的时候呢,我们对应的叫运行式常量池,诶我们通过这样的一些常量的一个指向,诶,避免了我们在自检码文件当中去加载大量的这个类啊,保证了一个自检码文件的一个小尺寸啊,是这样,然后它还具有ability能力,用来保护用户免于网络的恶意程序的攻击。
08:02
啊,这是我们说对Java虚拟机的一个比较简洁的一个概述哈,说Java虚拟机呢,它是一个抽象的计算机,呃,但是就像是一个真实的计算机一样,诶,它也有它的一个相应的一个指令集啊等等等等,呃,这块我们就诶不多看了哈,诶关于Java逊机最直接的一个描述就是官方的一个文档,那我们来看这个图,那如果我们把Java语言称为叫呃,跨平台的语言的话,那么GVM就是跨语言的平台。诶,这句话有点绕哈,大家捋一捋这个思路,GM我们称为叫跨语言的平台,这个图呢,这我绘制的啊,非常清晰的说明了这个问题,大家看这是Java虚拟机,Java虚拟机呢,呃,它的起始点就是从字节码开始的。啊,就是从自解码开始啊呃,自解码下边要对接的就是我们后面要讲解的,首先是呃,Class load sub system,就是类加载子系统,嗯,类加载器子系统啊,然后后边呢,才是内存的一个分配情况啊,诶扎尔虚尼呢,它的起始的原材料呢,叫做自减码文件啊,是这样子的,那么自解码文件呢,我们是可以由不同的编程语言所提供的啊,那从这个图呢,我们想说明的问题就是Java虚拟机的一个跨语言的平台的这样一个特征,那到目前为止,除了Java语言以外啊,这呢我们又放Java啊,像coy语言,嗯,Closure grooy skyla Jason gruvi javascript等等啊这样的一些语言都可以在我们Java虚拟机平台上进行解释运行,所以现在呢,我们叫Java虚拟机可能有点不太合适的啊,它不只能够用来解释运行Java程序啊,其他的这个编程语言程序也是可以的啊,嗯,只需要呢,我们。
09:55
不同的编程语言提供各自的编译器。就是他们各自的编译器呢,呃,编译出来以后的自检版文件,遵循Java逊尼的规范啊,让我们Java虚拟呢去解释运行就可以了,比如说啊,咱们后边也会讲,比如说这个自解码文件呢,大家如果打开去看的话呢,诶Java程序的自节就是不能叫Java程序了,就是我们Java虚拟所识别的这个词,解码文件呢,要求它的开头呢,是叫呃,Cafe baby是吧,呃,这个开头呢,我们这个叫魔术哈,识别呢,它是呃有效的一个自己码文件,那只要呢,我们不同的编程语言,你用你自己的编译器生成这个自己码文件呢,遵循Java虚拟的标准,OK Java虚拟机就可以用来解释运行对应的这样的一个这个编程语言了。
10:44
哎,这就是我们想要强调这个点哈,嗯,OK,那也就是说呢,Java虚拟机它其实不要求我们这个源程序必须用Java来写的,就像大家,呃,每天早上呢,你要喝牛奶,对吧?你不会去关心这个牛奶,前边的这个牛是内蒙的牛还是东北的牛,还是新疆的牛,你不会去关心这个问题,你只会关心这个奶,嗯,比如说是不是新鲜的奶,里边的营养成分是不是够,然后有没有坏,然后细菌呢,是不是没有超标,你只会关心这些问题,那扎va虚拟也是一样,它只关心自己码文件是不是符合它的一些规范,是吧,是不是一个有效的资金码文件,它不要求这个资金码文件来源于Java程序。
11:30
好,呃,对这块呢,我们也说明了这样的问题啊,那呃往前推的话呢,它是基于哪个规范呢?是JAVA7发布以后呢,Java区的设计者,呃,就JS2292的这个规范啊,说到了说Java虚拟机平台运行这个非Java程序是可以的,他只关心自解码文件。啊,也就是说呢,如果我们把Java虚拟机我放成这个框的话呢,Java虚拟的起始点呢,它就关心我们刚才提到叫自解码文件啊,然后呢,诶进行运行输出就可以了,那这个模型非常像什么呢?像我们中学学的函数。
12:08
中间这个GM呢,我们称为一个函数,或者呢也叫做对应法则,那入口这儿呢,我们可以叫做自变量,当然这个自变量你可以有很多个自变量啊。诶是这样的,是一个向量,呃,自变量呢,放到我们这个这个大盒子里边,这个函数里边,然后呢,一顿运算出来一个结果啊,我写成一个Y啊,叫一个显应变量啊,就可以理解成我们这个程序的运行,最后输出一个结果啊这样的一个情况,那函数呢,就像我们的Java虚拟机自检版文件呢,就是我们的自变量。啊,不关心这个它的来源,我们只关心这个资源码文件,你在前边从哪来的这个变量值,这个我不管。啊,是这样子的啊,那总结一句话呢,就是Java不是最强大的语言,但是呢,Java虚拟机是最强大的虚拟机啊,这句话呢,听着还是比较嚣张的是吧?呃,那确实嚣张了吗?呃,确确实是嚣张了哈,呃,但是呢,呃,还是有嚣张的资本的,对吧?那时至今日呢,其实毫不夸张的说呢,Java虚拟机实际上呢,是一个比Java语言本身更成功更优秀,乃至于说更伟大的产品。
13:19
啊,是这样子的啊。那刚才我们提到的这些内容呢,其实在我们这个官方规范里边,呃,在这段话呢,其实也有说明哈,你比如说呃,基于这个安全的考虑是吧,基于安全起见,Java虚拟机呢,它呃这个可以承载什么呢?承载这个叫强。强类型的语法和结构化的约束在我们的字节码文件当中。啊,也就是说为了安全起见呢,Java虚拟机呢,它给我们的要求这个资金码文件呢,是有一些结构性的一些约束的和强烈性的语法的一些规范啊这样子的啊,这个后边我们在呃中篇讲字节码的时候呢,会专门来说这个问题啊,然而虽然说有这样的一些要求哈,约束,然而任何编程语言,嗯,功能性的这种编程语言,That,这是一个定语从句哈,可以被express的in terms of valuelid class file说,只要是有一个有效的自解码文件。
14:26
嗯,可以被表达成一个有效自己码文件的一个语言。嗯。这个都可以被我们Java虚拟机所承载,诶说白了就是只要你任何一个编程语言呢,能够按照我们class文件的这个规范呢去写的话呢,诶Java虚拟呢,都可以去解释运行啊,那基于我们叫通用的这种可获得性和机器的平台的独立性啊,这提到这个跨平台性了,呃,基于这样的吸引。这个其他语言的实践者啊,就是实施者,他们可以选择Java虚拟机作为它的一个可交付的工具啊,使用他们自己的语言,就是用自己语言来编写,然后呢,真正解释运行的话呢,可以用我们的Java虚拟机啊,基于它的通用的可获得性和它呃跨平台这样的特征啊,写的比较清楚,好这呢就是我们想最终总结的一句话。
我来说两句