00:00
大家好,我是大家的老朋友,上硅谷的讲师孙洪康,那Oracle呢,在9月15号发布了JDK15,那今天呢,我们用利用一点时间呢,给大家呢,来讲解一下JAVA15这个版本当中的新特性,那如果呢,用四个字来形容的话呢,大家看到我这使用的叫波澜不惊,所以呢,大家应该能明白啊,我这里想表达的意思,那在讲解Java事物新特性之前啊,咱们首先来看一下整体的这个大的背景是什么。那今年呢,是2020年,那我们说呢,也是Java呢,诞生的第25个年头啊,1995年诞生的,对吧,那Oracle呢,也表示说目前呢,Java仍然是流行的编程语言,说的呢还是非常含蓄的,那如果呢,用数据来说话,那就是这样子的,说全世界啊,有超过69%的专职开发人员使用的是Java。那全世界呢,有510亿台活动的查询机在部署当中,那可见呢,这个数据呢,也是非常的霸道的,对吧?那不管是呃什么语言排行榜,我们都能看到,Java呢,始终是排在这个前列,数一数二的,那目前呢,Java主要应用的这个场景呢,这儿呢,我想也不用给大家做介绍了,因为呢,咱们看这条视频的同学普遍的都应该是正在做Java开发,所以说这里呢,也不用多给大家去介绍这个事情,好那么下面的话呢,我是罗列了一下,从JAVA5开始到我们JAVA14啊,历来的这个版本当中的主要的这个新特性都有哪些。
01:34
这呢,大家会看到我标识的几个特殊颜色的这个版本,那JAVA5标识出来呢,主要是因为它是咱们Java发展历史当中第一个具有里程碑式意义的一个版本,那JAVA5的时候呢,我们也可以称为呢叫JDK1.5,那这个也可以呢称为呢叫JDK5,那很多这个语法上和API层面的这个新特性啊,都是在JDK5当中填加过来的。那以及呢,6781直到14,那其中这个八呢,我这也标识了一下啊,这呢我们可以看成是第二个具有里程碑式意义的一个版本,这里边呢,主要提到的拉姆达表达式随中API,新的日期时间的API等等,还有其他的一些相关的新特性,那扎班呢,也是咱们目前在企业当中使用的频率最高的啊,占比最高的一个版本啊,这个没有意外的情况下呢,大家普遍使用的应该是炸巴,当然呢也存在着,那有一些小伙伴呢,在开发中现在使用的是JAVA7或者是哎,JAVA11啊都有可能,那JAVA11的话呢,是我们称为呢在JAVA8版本之后,那首次出现的一个LTS。
02:43
LTS就是长期支持的版本long termm support,对吧?哎,长期支持的版本,那从扎VA9开始,大家也知道了,我们Oracle呢,开始发布的这个周期就变了,那以前的话呢,我们都还可以称为呢,叫以特性为这个驱动的,对吧?那从JAVA9开始呢,改成以时间为驱动了,就每隔半年发布一个新的版本,那JDK9它的发布时间呢,是一七年的九月份,相较于JAVA8呢,是隔了三年零六个月啊,三年半的这个时间啊,隔得非常久,那从张二九开始呢,大家会发现每隔六个月呢,就要发布一个新的版本。
03:22
对吧,那没有问题,所以呢,扎VA11是我们说扎拉之后的,呃,第一个LTS,那在之后的话呢,如果说再出现LTS,那就是在三年之后啊,2021年的九月份,也就是说呢,明年的九月份发布一个长期支持的版本,那咱们现在讲解的JAVA15,那就意味着呢,在六个月之后又会发布JAVA16,所以呢,这里边的新特性的数量呢,显然呢就会少一些了啊,因为以时间为驱动嘛,半年的时间我们很难有大的一些变化。好,那下面呢,罗列出来的就是嗯,Open jdk啊,官方发布的一个路线图,包括呢,相关的一些版本,它的维护的时间啊,大家也能看到了,这里主要针对的都是LTS的这个版本。
04:03
没有问题对吧,那这个在下面的话呢,提到了一个叫Oracle jdk,前面呢,咱们以前也给大家讲过open jdk和Oracle jdk的一个区别,Oracle jdk呢,相关的一些版本,它支持的时间要更长一些啊,这个当然了,这个维护的时间越长,你相应的来说呢,呃,它也要做一些收费的行为,对吧?那这里比较诡异的是我们看到张二八呢,现在企业中用的比例比较高,他呢首要知识是2022年到三份,然后呢,扩展知识呢是2030年啊,11的话呢,是到2020年,所以看到非常诡异的一件事情啊,扎va巴呢,它的扩展知的时间比JAVA11还要久啊,这个Oracle不知道是不是在搞笑是吧,那可见呢,这个扎巴啊是我们认为非常重要的一个版本,OK,那这儿呢,是我们对整体上发布的这样的行为有一个大体的了解,那接下来的话呢,我们给大家介绍两个名词,这呢在我们之前讲解这个新特性当中呢,也给大家说过。
05:01
包括呢,刚才我们讲解的这些新特性呢,如果大家这个想具体了解在每一个版本当中,除了这里边儿我标识出来的一些主要新特性之外,还有哪些的话呢,大家呢,你也可以上商务的官网啊做一个学习啊,这个之前呢,像JAVA81直到JAVA14,每一个版本的新特性呢,这里边我都给大家讲过,当然呢,也能在咱们商务的鼓励学院上呢找到啊,包括在BB站上也可以啊找到呢,各个版本的心得性的一个讲解,做个学习,这呢我们讲15的话呢,我也把八级之后的这个各个版本呢新特性也给大家呢,以课件的方式呢罗列出来了。啊是这样子的行为,好,那么从这个扎VA9开始的话呢,诶我们说呢,叫小步快跑快速迭代,诶每半年发布一个版本,那在发布这个版本新特性的时候呢,提到了两个词,一个呢叫做孵化器模块,叫做incubator啊,一个呢叫做预览特性,叫那这两个版本有什么特点呢?什么意思呢?那我们这儿呢,首先来做一个说明。
06:01
英国别站呢,翻译过来我们称为那叫孵化镜模块,或者叫孵化板,也可以称为呢,叫实验板。啊,实验版那预览特性呢,叫preview啊,也可以称为叫预览特性,那孵化器模块呢,它主要是针对于尚未定稿的API,或者是相关的一些工具,它的主要目的呢,是为了从Java社区呢来收集一些反馈,那这个稳定性呢要差一些,就相较于这个pre的话呢,呃,稳定性要差一些,所以后期呢,有挺大的概率呢是要被移除的。啊啊这呢,提到这个孵化器板呢,呃,也主要呢是针对于这个开发人员来使用的,主要是希望呢受到一些反馈,继而呢是改进Java平台的一些质量,那这个预览特性呢,我们称为叫preview啊,基本上已经成型了,那实践呢也都确定了,但是呢还没有最终定稿,就是它仍然还不是一个正式版啊,还是一个预览版,就是你可以先用着啊,就是大体上的话呢,没啥问题了啊,是这样一个行为,但是呢,它确实也存在被移除的可能性。
07:04
啊,这句话的话呢,那其实说跟不说都一样,为啥呢,你正式版呢,是不是还有可能被移除啊,啊一些特性还有可能被移除,更何况是预览版对吧?哎,它当然也具备移除的可能性,但是啊,一般呢都会被固定下来,所以说这两个的主要区别呢,大家就想什么呢?就是你如果现在呢,有一些闲置资金了,你说你是去买这个收益相对来说少一些,但是更稳定的,呃,这个风险更低一些的基金,还是买股票呢,我们说股票的风险是不是就更大一些啊啊,那基金的这个风险要更小一些是吧,那这呢,就相较于我们这个叫孵化器和预览两个车型的一个区别啊。好,那这个一般呢,我们在我在讲解这个前面一些版本新特性的时候呢,一般呢,也会给大家提到了一个方法论的一个问题,就是每隔六个月就会发布一个新的版本,那我们该如何去剖析这些新的特性呢?那我通常呢,会提到了有三个角度,大家呢去做一个分析,那角度一呢,就是在语法层面啊有哪些变化。
08:06
啊,这个角度一和角度二呢,应该说对于咱们开发人员来讲呢,关注度稍微高一些啊,比如说主要呢,大家做这个应用层的开发的啊,做一些项目,做一些系统是吧?哎,一角度一和角度二,那角度三的话呢,是对一些高级的,比如说像底层优化相关的,哎,人员啊,更多的去做一个关注的是这个角度三,那从角度一上来讲的话呢,比如说历来都有哪些变化呢?哎,像咱们提到,比如说在这个张二八当中提到的像拉姆达这个表达式,以前呢,咱们没写过这种箭头操作符对吧?那在拉姆达表达式当中就出现这样一个结构了。啊,这是这是一个,包括呢,我们还提到了一个叫Switch表达式啊,像里边呢,还还能够出现这叫I的这样的一个关键字啊,我们可以呢,也体也体现了是一个类似于return啊这样的一个特征啊,就可以返回结束我们当前这个Switch这个结构的啊,叫做业务的这样的关键字,像这呢,都属于这个语法层面的一些变化,包括呢在词汇程当中也有这个健康操作图。
09:05
那大家呢,可以关注一下,那像刚才提到了。哎,在Switch当中是不是在这儿,哎,不是这儿啊,在我们的这个位置啊,这个12当中提到这个新特性啊,在十单当呢,又做了一个拓展,大家呢可以去做一个关注啊,这是属于语法层面的变化,包括呢,像我们JAVA5当中提到这个自动装箱啊,哎,拆箱呀。这呢也都属于语法层面的变化,包括这个应用关键字的出现,包括接口中。那接口中的这个,哎,静态方法啊,这个默认方法,还有这个私有方法啊等等,像这些的话呢,是不是都属于咱们叫语法层面的一些变化呀。对吧,哎,就是以前的话呢,我们说这个接口中怎么可以去定义私有方法呢,静态方法默认方法又是什么情况呢?呃,以前我们讲接口中只有这个抽象方法是吧?像这呢,都属于语法层面的一个变化啊,那么角段二呢,我们称为它叫API层面的变化就多了一些,我们可以去使用那些API。
10:05
这呢主要强调是多的一些东西啊,那这个depreated就是废弃的一些东西呢,一些结构呢,一般情况下咱们用的也都比较少是吧,所以说呢,废弃的这个结构呢,大家一般关注的可能也就会少一些,主要呢,我们就看一些增加了哪些东西啊,像这个javava当中,主要呢,增加的这个叫string API,毫无疑问这呢是我们可以进行Java内存层面数据的一个,呃,过滤啊,映射啊,这个规约是吧,等等这样排序啊,一些操作啊,包括呢,我们还提到叫新的日期啊时间的这个API啊,这也算是吧。哎,这也是,包括呢,我们还提到呢,解决这个控制异常呢,叫optional啊这样的一个类啊,这也是啊,还有呢,像string啊,也会增加它相关的一些方法,那包括呢,还有在这个呃,接口中提到了静态方法,默认方法,那在咱们这个集合框架当中啊,因为集合框架呢,像我们提到的这个clash啊,List map呀,对吧?哎,它里边呢,我们说本来都是接口,那在接口当中它就增加了一些相关这样的一些方法,这呢都属于API层面的一些变化。
11:11
啊,这呢也是大家需要做一些关注的啊,就是以前的话呢,你可能没有这些API,使用起来呢,也能做是吧,但是就是不方便,那现在的话呢,多了一些新的API啊,你可以直接呢做一些调用使用啊都可以,那第三个角度呢,我们通常称为呢,叫做底层的一些优化啊,就是大家呢,基于角度一,角度二可以直接去应用的,那角度三的话呢,有的时候我们就感觉不出来了。但是的话呢,哎,随着底层的一些优化,咱们在执行Java程序的时候呢,会发现这个速度变快了。对吧?啊,这里边儿我们就提到说Java语言啊,总是说说Java语言相较于这个C或者这个C加加的话呢,说这个执行效率低一些啊,这里边儿呢,要澄清一个事情,咱们Java呢,即使其实现在呢,跟C和C加比已经速度差不太多了啊,差别不大了啊,那这个主要的比如说你所谓的这个运行有差别,跟Java语言这个语法其实是没有关系的啊,语法也好,API层面也好,这个是没有关系的。
12:07
啊,当然了,你说我这个写了个算法特别差,那当然呢也是有问题的,对吧?算法呢,本身呢是独立这个语言而存在的啊,那就跟说大家呢,去呃这个ACM比赛一样是吧?啊这个呢,你用什么语言都可以啊,就本身语言上的话呢,它其实是无罪的啊,主要呢,这个区别呢,就在于编译器的区别啊,编译器体现了不同语言的执行效率,那所以呢,Java呢,不停的在做底层的相关的一些优化啊这里边我们会看到,常常大家会在在各个新特性的版本当中会看到,比如说关于GM的一个优化。对吧?啊,基本优化,比如说还涉及到里边,具体的话呢,像这个圆空间,咱们在JAVA8当中使用了叫Meta space去替换原来的叫carbon space,那就说叫永久带啊,正常起调原空间啊,那以及呢,我们会看到新的一些垃圾回收器的出现,比如说ZJC啊,当然还有例子当中呢,像g first啊,垃圾回收器等等,那新的垃圾回收器的出现,包括呢?诶垃圾回收器的一些组合的一些变化啊,一些不好的组合呢,我们就把它干掉了啊这呢涉及到新生代老年代的一些组合的问题,对吧?包括呢,诶相应的你垃圾回收器的出现,对应的这个JC的一些参数也会有一些调整啊,这呢就提到参数的一些变化,那以及呢,我们在障va虚拟当中去运行像这个脚本语言,像GS啊GS它的这个执行引擎对吧。
13:34
那执行引擎,那这呢提到了,比如叫啊这个那号啊呃,这样的这个GS的这个执行引擎,还有什么呢?比如说这个集合的一个底层的这个实现。啊,像我们提到的一个哈奇map,原来呢,我们讲JDK7当中是数组加电表,那JDK8呢,就数组加电表加宏位数,那底层的一些优化呢,也使得我们整个的这个运行的效率啊,就会更加的哎,提高啊,那这块呢,有的时候我们是看不太出来的啊,因为底层做完优化之后呢,大家在呃,他在上面做一些API啊,一些调用执行,那会看到呢,效率自然而然的就做了一些提升。
14:11
当然了,如果你是做这个系统架构啊,做一些系统优化的话呢,你还是需要关注一些GC的变化,OK,这个呢,就是咱们讲解的整体的一个大背景,那接下来的话呢,我们看一看GDK事务当中具体有哪些新的特性。
我来说两句