00:00
我们来学习JAVA11,北京时间2018年9月26日,Oracle官方宣布JAVA11正式发布,呃,这是Java大版本周期变化以后的第一个长期支持的版本啊,长期支持的版本我们称为LTSLTS,那么非常值得关注,为什么?因为JAVA9和十哎,都是两个非常非常的一个过渡,非踌快的一个过渡,那么JAVA11呢?啊,是值得关注的,因为它是长期支持的版本,那么在之前JAVA8是长期支持的版本,所以JAVA11值得重视。那么最新的这个JAVA11版本我们就可以从官网直接下载,它将会带来z GC http client的客户端。
01:00
等重要特性,那么一共包括17个GP,什么是GP啊,哎,JP就是JDK的一个增强提案,那么这个提案显然是在哎之前就已经提上来的,但是呢,一直有可能因为各种原因没有实现啊,没有实现,那么在我们的加VA11当中,这些个提案就已经实现了,就已经实现了,所以值得我们去学习,那么17个只有这17个这个提案的更新吗?其实不仅如此,还有好多哎好多我们我们的啊重点的目光,哎关注在这几个上面,这几个上面,那么Java更新的这么频繁,我们是否要考虑升级。我们的,我们要不要再去学,哎,会不会有一种感觉,学不动了,哎学不动了,其实啊,这些都要放下这些个偏见,那么我们说JAVA11是非常重要的版本,它是一个跨时代的版本,就像我们的历史当中的JDK8 JDK5,哎都是非常重要的版本,那么JDK11呢,哎,是一个重要的版本啊,那么我们看它首先不容忽视,为什么?因为它的时间的发布,它正好是处在JDK8免费更新到期的一个前夕,同时JDK9和十很快的就会成为历史版本了,我们来看这个路线图,诶,到2019年的一月,也就是正好到现在,但是它发布呢,是在十月啊,九月底啊,九月底,所以这个JAVA8的支持很快就要结束,马上进入啊JAVA11的。
02:50
时代,L11的时代,好,那么我们说这个GDK更新很重要吗?哎,非常重要啊,非常重要。那么在过去很多年,Oracle和open jdk社区提供了接近免费的这个JDK,我们常我们也说这是免费的午餐,但是天下有没有免费的午餐呢?哎,不可能永远有天免费的午餐。那么当我们去用呃这么免费的方便的时候,就会我让我们忽略了它其背后海量的工作和价值。那么这其中包括但不仅仅限于有最新的安全更新,哎,例如安全协议等等,还有什么呢?哎,还有一些大量的新特性,Bug的修复,哎,Bug的修复等等。那么我们就发现在Oracle官方发布每一个更新版本的时候,都有大量的漏洞或更新,哎,被修补了,所以Oracle都是每一次总是强。
03:50
烈的建议用户升级到最新的版本,那么最新的版本总是啊,把之前的啊,一些个常见的问题,或者是呃,不太常见的问题,都隐藏的问题都解决了,大家都解决了,好,那么我们升级JDK就可以带来这些个好处,不断的改进的这个虚拟机也让我们也给我们提供了一个零成本的性能优化。
04:19
哎,也就是之前我们需要不断的去调优调各种参数,诶,那么现在我们通过升级就可以直接做到,哎,那么更方便诶更方便更省事。这个11是一个长期支持版本,Lts long term support长期支持的版本意味着什么?它是可靠的、可预测的一个技术路线图。对于企业来说,这是非常重要的啊,要有一个啊,随时随地都能够有支持的,并且是诶可以预测的这样的一个。这是这样的一个路线,那么这时企业就会考虑,诶企企业考虑,并且其中我们说有免费的open jdk,它也会得到open jdk社区的一个长期支持,也就是说收费的版本,OK,你可以得到支持,长期支持没问题,免费的用户呢,哎也一样,因为open jdk是免费的啊,免费的所以。
05:21
综合考虑,这个长期支持版本意义重大,那么它将会是一个可以放心选择的一个版本,来放心选择的版本,并且我们说这个open jdk社区也是做出承诺啊,他会保证这个海狮没有问题,长期支持的好,然后呢,另外一个角度我们看从GC的角度来看JDK的一个更新。我们说GC是Java最重要的两个特性之一,一个是GC,另外一个是什么来着啊,就是下va虚拟机机制,哎,虚拟机机制啊,另外一个就是GCGC,它是GC,它是干什么?垃圾收集,那么垃圾收集它的收集的核心,它要解放,解放程序员,那么在之前的程序当中,我们去啊释放内存会需要手工释放,会非常的繁琐,而且很容易很容易遗忘,所以GC是Java的重要特性,这个我们就不再多说,前面应该都已经介绍过了,那么这个GC它在工作的时候,它是以什么形式工作呢?啊,它虽然是一个后台的一个进程,一个守护进程来执行啊,守护线程来执行,但是我们也不得不,哎,不得不面对。
06:46
不得不面对问题,不得不面对GC,它在后台工作的时候,还仍然会引起我们用用户线程的一个暂停的问题啊,暂停的,而我们说在JAVA11当中,这个崭新的GGC,它具有划时代的意义,为什么具有划时代的意义呢?下面这个图很显然很显然,那么这是这个GC的一个暂停时间的一个对比。
07:15
暂停,诶,GC会暂停吗?没有感觉到啊,啊,因为我们在学习阶段用的这个数据量还是比较小,看不出啊,没有感受到GC它的工作带给我们的影响,那么GC在实际在工作的时候,它会给我们造成呃一些影响,而这个影响其实是一直不容我们忽视的,而JAVA11当中啊,对于这个影响就改进了ZGC,它保证了不超过十毫秒的暂停,十毫秒啊,不超过不超过十毫秒,也就最多十毫秒,那么十毫秒对于我们来说,哎,真的是非常的短了,因为相比而言,G1这个我们现在主流的垃圾收集器,那么这个它的一个对比我们发现完全不具备可比性,这是GGC,这是G,然后呢,这是GGC,这是G,哎,它的差别太大了,哎,差别差别太大,并且它也保证。
08:16
啊,这个更高的可靠性啊,可靠性,那么这个是我们之前通过GC调优几乎做不到的。因为呃,调优是可以改进,但是呢,哎,调优也不是全能的,不是万能的,那么我们直接使用这个更好的。更好的一个垃圾收集器,不就是哎,那不更方便吗?啊直接就到位了,它和之前的GC是比较,是是能与不能的问题,也就是调优,你你调调的不可能调到十毫秒,诶所以这个是能与不能的问题,是一个跨时代的来跨时代啊,那么我们说这个ZGC当中的还有更多的呃,一些个细节,诶,它哪些优化了,它优化在哪啊,怎么个优化,如何使用啊,我们在后面的课程当中啊,会陆续的提到。
09:13
另外一个是啊,需要重点关注的是这个云计算时代,我们监控和诊断以及profiling的这样一个能力,也就是说我们要想监控这个Java虚拟机,它的一个工作,我们在之前啊之前怎么做呀?啊,有可能用一些不太好用的工具,或者甚至诶自己去写一些工具去做这样的工作,那么那么我们现在升级到JDK11以后呢,啊就可以不用了,不用了,而且我们是Java的应用场景的跨度也很大,从单机,然后呢到分布式,然后呢,还有什么单体应用,或者是一些一些很小的运啊,很小的运行场景,那么它的应用场景越来越复杂,越来越复杂,随着这个应用场景的复杂,复杂度的增加,那么我们对于它的虚拟机的运行的状况的一个监控就变得非常的重要和迫切啊迫切。那么我们之。
10:14
诶诶,比如之前给我们提供我们有哪些工具可用呢?比如j conso啊,J profiler等等这些工具可供使用,但是呢,这些工具诶它都不是那么特别好用的,那么我们说扎JDK11为我们提供了这个更强大的基础能力,基础能力意味着什么啊,意味着这是剧本的基本的第一个就是这个flight recorder flight recorder g FR Java flight recorder,那么这是Oracle刚刚开源的一个强大的特性,诶那么之前有这个东西吗?大家注意是有的,但是这个Java的flight recorder,它是作为商业版的特性。商业版的特性也就普通用户能用吗?不可以的,哎,不可以,所以这个Oracle已经把它开源了,就意味着什么,哎,可以随便用,免费用,那么这个flight recorder飞行记录不就是这个黑匣子吗?
11:14
哎,和它是一样的道理,飞机在飞行的时候,哎,通过黑匣子记录一些个关键的数据,那么在诶,万一真的出了问题,那么这个黑匣子中的数据就变得极其的重要,并且它是不断的在记落,那么它它的存在有没有影响飞机的飞行啊,没有啊,没有,也就是它的执行并不会影响我们的。主主任务的执行,哎,主任务执行,那么GF它是嵌集成叫GDK以及GVM内部的一个通过事件的一个驱动的机制,那么诶,比如我们点击鼠标,诶发生一个事件啊,这个事件该怎么处理呢?哎,交由一个一些个函数去处理,那么这个基于事件的处理相信大家也不陌生,诶我们在javascript当中对于按钮的响应等等,诶那么我们的gfr也是这样的一个机制,诶也是这样的一机制,那么有在一些测试当中,我们说gfr的性能开销最大才不不超过1%,也就是说不超过1%,就像我们CPU利用率到了1%,对于这台电脑影响吗?影响很小,哎,所以它是可以大规模的在生产环境当中去使用。
12:33
而生产环境当中,不用担心主任务,主任务被他耽搁了,诶被他这个抢夺了CPU,没有关系啊,没有关系,那么这样的话,我们就可以在实际的生产环境当中去真正的去解决问题,而不是诶出现了个问题,我没来得及记录,然后呢,我要想再现这个问题,这几乎是做不到的,哎,所以我们说这个GF2这个飞行记录仪是一个非常非常好的,非常好的,那么我们不仅可以哎监测这个各种问题,并且我们还可以进入更细度的,更细微的一些分析,比如这个GC啊c point安全点呀,甚至我们还能看到什么,哎,这个我们的虚拟机的一个热点编译,哎,热点编译,那么这些个掌握一下,看看哪儿用到了热点方法,哪个方法是热点方法,哪些它。
13:33
进行了内联操作,哎,进行内联操作,那么这都是我们可以通过这个飞行记录仪所能做到的,这样的话,好,我们说在这里这个它为复杂的企业应用站或者复杂的分布式应用提供all in one解决方案,什么意思啊,哎,一个就这一个就解决了,都有了,哎,都有了,并且这一切都是已经内建在GDK和GVM内部,它就自动带这个功能,哎,我们只需要什么,哎,这需要用它就好了,所以这是哎。
14:10
原生支持的,哎我们知道原生支持的都是,哎最好的速度最快的好,那么来看下面这个,哎,Low overhead he profiling,那么它来源于Google等业界前沿厂商的一些一线实践,然后呢,啊去通过一些个手段来获取对象分配的一些细节啊啊反正就是堆的一个分析是不是,哎堆的分析,那么为JDK这个补足了对象分配诊端方面的一些短板,诶也是对象分分配在哪,究竟分配在哪,对象多大,它内部的数据如何,哎,那么我们就可以通过这个,通过这个工具来去实现,哎那么我们说这个它是通过g v m ti哎这样的来使提供的这个工具,提供的这个方便,那么这个t g m ti是什么呀?啊,就是Java虚拟机的一个工具接口,I工具接口,那么。
15:10
啊,这个我们在后面会简单介绍好,那么另外一个我们说从Java类库的发展角度来看,JDK11,诶也有两个方面的进步,第一个就是新加的HTTP2,哎,HTP2,那么这是我们业界前沿的标准,前沿的标准,哎,其实这个类似的还有什么UNICODE10哎等等,还有最新的安全,安全的一些算法,那么这些都是紧跟着,紧跟着这个业界的前沿的,所以我们学习Java不用担心,诶这个是不是落后了没没有问题。不会落后,那么HTTP2支持,然后呢,还有就是HTTP的一个client客户端,客户端,那么这个客户端,比如我们之前要想用Java开发客户端,那个是。
16:04
那不现实的啊,或者说那个是很费劲的,我们需要用到这个URL connection这个比较低级的这样一个类来去做,那么一旦更新到JDK11以后,诶,那么我们就可以直接使用原生的API来支持来使用,哎,那么之前我们也依赖第三方的一些个工具,比如H阿帕奇这个http client,以及jet k http等,诶,那么我现在就不需要了,哎,不需了,甚至我们说这个。JDK自带的HTTP客户端,它和这些个第三方的,那么主流的这些个API,它有对等甚至更高的性能来,甚至更高的性能,那么这个与此同时,它也是在GDK,在这个reactive stream方面的第一个生产实践,哎,就是我们这个硫的概念啊,硫的概念,那么我们在JAVA8当中对于流有一个啊深入的学习,那么我们发现这个流的出现,使得我们的解决问题的思考方式,以及解决问题的这个角度完全的就发生了变化,哎,发生变化,所以这是一个趋势,哎趋势那么在我们的HTP当中就体现的非常好,哎,非常好。
17:27
好,那么第二个就是它的安全类库和标准类库等大范围升级,其中特别是这个安全性,安全性我们说是一直是什么首要的安全首要的,即使是我们Java程序好像是作为后后台后端,然后呢,哎,前端是和它隔离的,但是呢,这个重要性也是很重要的啊,也是很重要的,那么。他除了在安全领域有重要的价值以外,我们还发现他还是我们中国的一个安全专家范学雷,哎,所领导的这这个项目,也就是说这个是有我们中国人去参与的啊,还是值得骄傲的,那么完全不同于以往的一些修修补补,是一个大规模的一个工程。
18:13
啊,最后出最后呢,我们说这个JDK还进行了一些其他的瘦身工作,什么是瘦身啊,发现这个代码越来越臃肿,越来越臃肿,哎,那么我们要反思,当我们有些场景不需要不需要这些。累赘的时候我们该怎么办?哎,JDK给我们提供了解决方案,哎还有就是JDK偿还了一些历史欠账,哎历史欠因为在呃Java早期推出的时候,诶Java就这这个就宣称我能这样,能这样我能那样呢,但是一直就没有实现,诶那么这些历史的欠账呢,啊也有一些个偿还偿还,比如像这个335当中,他把这个national javascript的引擎给他,哎给它弃用了啊弃用了,那么这个我们说它这个目前当然还在,还可以使用,但是已经不建议大家使用了,那么Oracle建议怎么怎么做呢?用什么作为替代呢?诶一个新的研发的一个G这样一个东西,那么这个是Oracle开发的,它进一步的。
19:26
建议用户去使用这个,诶使用这个,那么这是什么呢?诶,这是一个集各种平台的一个大成者,那么也就是他是用价va实现的,但是它又不仅可以支持Java,还能支持其他的各种语言,而是一个非常激动人心的方向,那么我们说这个Java on Java正在一步步的成为现实,这是很早以前就提出来的,什么意思啊,Java on Java啊,也就是我的Java程序,呃,运行在Java上面,我的虚拟机又运行在Java上面啊,那么这样的话啊,这个JDK11它的进步还是非常大的,哎,非常大的,好,那么我们先简单聊一些,然后呢,一会儿我们对这个JP的列表啊,有有一个简单的分析。
我来说两句