00:00
好,下面我们来看一下这11当中还有一些其他的一些更新,那么14点完全支持Linux容器,包括docker,那么我们说知道这个Java虚拟机当中运行的应用程序啊,它都可以在docker容器当中去运行,那么在docker容器中运行这样程序一直存在一个问题,那么就是在容器中运行的程序在设置内存大小和CPU使用率后,就会导致应用程序的性能下降,这是因为Java应用程序没有意识到它正在容器中运行,那么随着JAVA10的发布,这个问题总算得以解决,那么我们就可以,哎,通过这个识别,由这个容器控制组。
01:00
来进行一个识别,那么这样的话,他就知道自己在哪里运行,那么从而使得它的这个运行的内存也好,CPU的占用,它都是合理的,大家都是合理的,那么那么我们说这个它如何适这个适应docker呢?它都是自动完成的,所以我们下面的代码就啊不需要也不需要测试,大家知道有这么回事,哎,他们它在docker当中是更加完美的支持的啊,更加完美支持好下一个点,那么我们说JAVA11当中支持记忆上的并行,完全垃圾手机,那么在JAVA11之前,也就是在JAVA8当中,那么G1它还没有发展的这个那么快,在我11当中,诶,我们就可以免费享受到并行的这个副GC快速的car table手表,什么是car table啊,哎,就是卡片表,卡片表,那么这是G1的工作原理。它要对。
02:00
卡片进行一个扫描,哎,那扫描,那么这样的话提高了GC的速度,并且它可以自自适应,哎对应的占用比例等等,好然后呢,它主要就是针对G忆的一个哎增强,那么因为串行负GC是这个一直是不太好的,那么我们就发现用并行的负GC就要快很多,因为并行嘛,多线程,多线程必然是提高效率的。啊,好,来看第16GP331 low overhead hi,免费的第一耗能飞行记录仪和堆分析仪,呃,也就是它提供了一些,呃,全新的更加丰富的一个接口,让我们通过用这个g v m ti的方式来来实现一个这个虚拟机的内部运作的一个机制的一个查看。那么我们说g g m ti是什么东西呢?呃,GMTGVMTT是to I是interface,这是一一组一系列Java虚拟机的工具接口,当然我们说Java虚拟机这个工具,呃,我们怎么和他接口呢?对不起,Java程序没法接口,它必须通过C或C加加来通过C和C加加,因为我们的GVM的底层就是用C和C加加去实现的,所以G。
03:33
B m ti的这个工具的使用,哎,我们必须非常熟练,C和C加加,哎,然后呢,我们通过一些一系列的一些回调,呃,也就当我们GVM当中发生一些事情,事件发生的时候,那么这个事件一旦发生,他就会回调一些提前注册好的这个函数,然后呢,我们在函数中就可以分析当前的呃,虚拟机中的内存数据,呃,内存数据或者是其他的一些个其他的一些个对象的运行状况啊,哎等等,那么这样的话,提供一个呃非常好的途径让我们去和GVM去。
04:15
哎,去交互啊,去监测监控,并且因为它是第一耗能,什么叫低耗能啊,那第一耗能就是当我们去这样干预到虚拟机的运行的时候,那么虚拟机在执行其他程序几乎不受影响啊,如果我们在一边监控虚拟机,另外一边虚拟就没有办法干活了,那这肯定是效效率效果不好的,但是我们说JAVA11当中,我们即使在啊,一方面监测虚拟机,另外一方面虚拟机也正在生产环境当中运行,也是没有任没有影响的,这个影响很小,哎,很小,那么那么希望达到的目的有哪些呢?来提供用于生产和消费数据来作为事件的API,然后呢,提供缓存机制和二进制数据格式,哎,这样的话,我们就能够把这个底层的内部数据啊看得清清楚楚,那么允许事件配置和事件过滤,哎,对发生一些事件该如何处理?
05:15
还有提供一些其他的一些事件,那么它是基于事件的啊,基于事件,那么就像我们的这个叫图形化界面,还有各种哎各种各种架构,它其实都采用了这种机制,就是事件的一个机制,哎由事件触发好,然后呢,我们再来看第17点GEP329,它实现了这个RFC7539中指定的这两种加密算法,这两种加密算法那么显然它更高效更安全,那么我们用新的API,哎,用新的API就可以实现这个加密算法的一个使用,哎加密算法的使用这里面有一个示例代码,我在这里就不测了,大家可以诶测试一下,哎,大家可以测试一下好,然后呢,18新的默认跟权限证数集,哎,这都是相安全相关的,19呢啊也是哎实现这个。
06:15
啊,TSTLS协议,1.3版本啊,1.3版本,所以我们发现我们的Java一直在跟随这个各个行业标准,比如我们unode呀,哎,这个TLS呀,还有各种哎密码加密算法等等都是哎走在最前沿的,哎最前沿的好,那么最后我们来稍微多一点点时间来研究Java flight recorder flight recorder源自就是飞机的那个黑盒子啊,Flight record记录仪嘛,黑黑黑盒子,那么它的作用很明显啊,就像记录飞机的飞行数据一样。它可以记录Java的运行数据,呃,运行数据,那么Java flight recorder这个它是以前商业版的特性,什么叫为什么叫商业版的特性啊,也就是说你要想去使用这功能,你必须付费,而是需要花钱的,而且很贵的,但是我们JAVA11当中把它开源了,一旦开源就意味着免费,并且源码也是啊,释放出来的大家都能够看到,并且可以自行的修改并重新编译,我们就可以定制各种功能,当然我们说Java是Java本身是开源的吗?是哎,Java也是开源的,当然我们说这个Java的开源,哎,有两个分支,呃,Java有两个分支,一个是Oracle的官方的一个标准的Java版本,呃,另外一个叫做open jdk,诶就是一个开源的JDK。
07:55
那么这个flight recorder本身它是一个工具,哎,工具,那么在之前的时候呢,这个工具它并不开源,诶现在呢,开源了,那么这样的话,我们就可以方便的使用这个flight record。
08:11
哎,飞行记录仪,那么我们在最开始的时候就讲过,这个JAVA11当中有一些废弃的东西,诶还记得吗?哎,有些废弃的,我们说废弃了哪些东西来着,哎,废弃的这个unlock commercial commercial features commercial features,那么啥意思呢?哎,它就是解锁商业插件,那么我们的飞行记录仪是典型的unlock就解锁的意思,那那么Java实习当中废弃呢,也就是说不需要解锁,因为这个它就是免费提供的,可以直接使用,哎可以直接使用好,那么这是这个flight recorder飞行记录仪,那么这个飞行记录仪该如何使用呢?哎,我们可以有两种方式,哎一种是在程序运行时加入这个选项,哎,然后呢,Start flight recording recording或者。
09:11
我们也可以在应用启动之后,使用另外的一个程序来去录制,诶那么我们说第二种方式,它其实会更简单一些,诶更简单一些,那么这个GF2飞行记录仪,那么就会把Java虚拟机的运行的细节全部干什么把它记录下来,诶最终我们可以记录到一个文件里面去记录到一个文件里面,然后我们通过分析这个文件,我们就能够知道啊,这个虚拟机内部它是如何运作的,哎,GC怎么工作的哎,类什么时候加载啊,哎,它的这个工作方式是什么?哎,对象什么时候创建等等等等,哎,那么我们说这个gfr是一套集成进入JDKGVM内部的一个事件机制框架,也就GVM从底层它就支持允许你这么做,那么他显然是通过非常好的设计的,所以它到达一种硬件。
10:11
层面的机制优化,所以我们说它低功耗,也就是说当我们去监测它的时候,它另外一方面在生产环境当中几乎不受影响,哎,所以它的性能开销最大不超过1%啊,很小,所以工程是可以没有心理负担的,大规模的在生产系统当中去使用,这样的话,更数我们采集到的数据会更加的真实,更加的有针对性的去解决问题,来解决问题,那么在复杂的环境当中来进行分析,这个尤其是有一些啊问题,我们在实验环境当中是很难再现的,但是呢,在环境生产环境当中诶就会出问题,那么诶这时候如果我们用这种技术的话,让他在生产环境当中一边出问题诶一边记录它,这样的话我们就可以来解决它,找着问题的本源在哪里。
11:08
好,那么我们说这个gfr它记录的呃,信息是非常多的啊,非常多的,那么我们下面来简单看一下它的一个使用,It使用,首先我们来打开我们的这个目录,哎,打开目录我们说JAVA11好,然后呢,我们在code当中来来写一下,好,那么我在这里写了一个比较简单的,比较简单的gfr test这个文件,好打开它看一下。好,然后呢,这里面也是有一个class garbage,诶垃圾有个垃圾,然后呢,呃,Finalize,其实这是我们之前的一个简单测试,然后呢创在主方法中创建一个例子集合,然后呢我再用循环不停的添加。添加这个对象放到集合当中,如果这个数目到了500以后呢,哎,我就给它clear一下,好clear完以后呢,我在线程休眠500毫秒,这样的话,我们说这个过程它就是一个啊,不断的循环,不断的添加对象,并且不断的清空集合,那么这样的话GC就会在后台运行,那么我们就可以通过gfr去哎观测来去观测好,那么这是一个简单的例子,好,下面我们来好打开这个命令行,好,这里面有一个测试用的,把它删掉,好先编译好,首先确认Java减version是不是JAVA11,诶没问题,哎,没问题,好,然后呢,编译Java c,哎,Gfr test.java好,编译好以后呢,我们就可以运行,那么在运行之前I。
12:59
哎,需不需要在这里就直接启动飞行管理器呢?啊,其实是不需要的,那么我们只需要干什么啊,运行程序就OK了,好,那么运行程序的时候也很简单,直接运行啊,Java gfr test点呃呃,直接主类直接运行,好那么运行的时候它这没有任何反应,因为它后台。
13:24
哎,后台是不是有这个死循环不停在运行了,好,然后呢,让它在运行的过程当中,我们就可以哎对其进行记录了,那么它上面这个进程在运行当中,哎,在运行当中,那么我们通过另外一个程序来最终记录它,所以它是非常的方便的,那么记录的方式是什么呀?哎,就是这三个,这三个命令接command,哎接command,那么注意第二个参数是PID,什么PID啊,就是进程ID,那你怎么知道进程ID呢?哎,我们可以打开任务管理器当中的这个。
14:06
好,打开任务管理器,我们来找一下我们的Java进程,诶,在这占一个Java进程好,那么它占用17兆内存,差不多3628,诶,这是它的PID 3628好,那么我们要想去让这个飞行记录仪针对于这个进程去开始工作,诶,那我们需要输入接command,呃,先确认这样吗?进versionson好,没有问题,然后呢,接command空格多来着,3236283628好,然后呢接fr.start好,开始好那么它的就会把这个3628这个进程的飞行记录仪相当于打开了,他说开始记录记录仪,哎,注意它有个编号no limit specific也就没有限制,没有限制。
15:06
然后呢,最大是250兆啊,也就这个,最终我们去生成的文件最大50兆,然后我们就可以干什么呢?啊,使用另外一个命令,把这个记录到的数据,哎放到一个文件里面,Copy到复制到文件里面,那么显然这个数据它现在记在哪呢?哎在这个内存当中在记录着,所以我们不不便于查看,那我们最好我们稍等一会会儿,哎等上几秒钟让它记录一会儿,哎是不是让飞机飞一会儿啊飞一会儿产生些出去好了,然后我们此时哎就可以执行这个命令,接command,然后PID3628好,然后空格J fr.damp把数据是不是导出来好,注意file name是文件名,哎文件名这是一个,比如这叫test.gsr,注意后缀是g FR Java。
16:06
Flight recorder,好,然后还有一个参数非常重要,就是name等于一,哎,也就是它里面记录了好几个,然后呢,我们用name等于一来来去特别指定好,然后呢,诶,他说这个235 231k written to这个文件,诶记录好了,哎,那么此时注意飞行记录仪它还在记录,其实我们就不用了,我们就让它停止吧,啊然后呢,J m j command 3628,哎,3628进程ID,然后呢,J fr.stop注意一定要加上这个name name是几啊,一哎,是这个默认的这个一,好诶他说stopped record停下来了,好,然后我们来看一下这个test.g法,诶3232K已经生成了,已经生成,那么这个文件我们能看吗?能不能看呀?
17:06
哎,基本上没法看,哎,因为它是一个二进制文件,哎二进制文件当然我们可以隐约的好像能看到一些东西,哎能看到一些东西,但是呢,还是诶不太清晰,那么像这种情况,这个文件怎么办呢?哎,我们。非常遗憾,JAVA11当中并没有给我们提供那个GMCGMC,那么GMC是什么东西呢?呃,是Java missing control一个工具,非常遗憾,那么JAVA8当中有没有啊,注意我试一下JDK,我把JAJDK切换成八的版本,然后GMC有没有啊,哎,这个是有的,但是很遗憾,我们这个是11产生的新版本,它不支持,哎,不支持哎所以怎么办呢?哎,我后来找着一个这个找着一个什么呢?哎,找着一个更高版本的JDK12,诶JDK12,那么JDK12我们来看一下,诶我这切换到JDK12 JDK12当中,它就有一个程序,专门就叫什么G f2gfr好M回车,然后呢,他就可以干什么,他说to for working with flight recorder fire,哎,这是一个工具。
我来说两句