00:00
各位同学大家好,在前面呢,咱们已经完成了此轮中的主要内容,包括IOC容器A面向切面事物的操作以及资源访问国际化,包括数据校验。那下面呢,我们来讲解死文里边的最后一个内容,叫做提前编译AOT,这个AOT也是此文六中的一个新的内容,那下面呢,我们先说一下AOT的基本概述,然后通过一个例子给大家演示一个过程。那咱们下面说一下概述,我这里提到啊at呢,其实是一种编译方式,说到at,咱们不得不提另一种方式叫git,那我下面在这里边给大家具体写一下这个基本概念。我写到这个位置啊,就是AOT的相关的概念。那咱首先先说第一个内容,它叫做GI,那咱说一下啊,这个到底是什么意思,给各位来解释一下,这个J呢,是一个英文的简称,它的英文的全称叫什么呢?它叫做just。
01:10
In time,它表示是什么呢?叫做动态变异或者叫实时编译,我写一下啊,动态变异或者说叫实时编译,也就是说咱们一边运行,然后一边进行编译。这个是我们提到的第一个叫GI,我把这个写完啊,就一边运行一边进行变异,然后GI呢,它是一种默认的方式,就是咱目前我们写Java程序进行编译,用的就是j it这种动态编译方式,然后这种方式具体是怎么样的,我在里边给大家进一步来写一下,这个JT咱写到这里啊,就是我们现在呢,在这个程序的这个运行的时候,然后这个时候呢,我们进行这个GI itt的动态编译,这种方式的特点是是什么呢?它的吞吐量很高,运行的时候呢,可以进行性能优化,然后它可以动态生成代码,写一下啊动态生成代码,但是呢,它有自己的缺点,什么缺点,因为咱们是一边运行一边编译动态生成代码,所以造成的你的启动会比较慢,比如说我这里边啊,要有很多代码。
02:29
一边运行一边生成,可能启动可能时间比较慢,另外我们在编译的时候,它需要占用你那个运行时的这个资源,所以这里边有它的优点,有它的缺点,这个叫GI的这种方式,这个位给他明确,咱们现在说这个a op也是一种变现方式,但是跟JT是完全不一样的,给大家进一步写一下啊,At是怎么做的,注意是at啊,不是A。我写到这位置。
03:00
A。AOT什么意思呢?写一下啊,它也是一个英文的简写,它的英文全称叫做ahead。Of time叫做运行前编译或者叫提前编译,写到这里啊,运行前编译或者叫提前进行编译,那这个什么特点,给大家进一步咱们也是来写一下啊。它怎么样的一个特点呢?我写到下面啊,就是AOT,它可以把我们的那个源代码直接给它转换成这个叫机器码啊,什么叫机器码呢?就是我这个可以直接认识,直接运行,因为咱们加入程序,计算机不认识,转成机器码可以直接运行,而这过程中好处就是在运行的时候,咱直接启动,它肯定是速度很快,而这个时候它不是一边编译一边进行运行,它是都编译好之后直接进行运行,这是它一个特点,就是咱说的提前编译,或者叫运行前编译,然后它的特点咱也说到了,就是启动速度快。
04:11
另外内存的占用会很低,因为它都编译好了,而这个特点就是直接把我们的静态链接到最终统计中,但是呢,它有自己的缺点,什么缺点呢?也很明确啊,就是跟这个JT相比,因为它是提前编译好,所以我们在运行的时候肯定是不能进行优化的,你已经编译好了,而我们提前编译成这个时候,比如说我们现在提前编译会造成我这个程序的这个,就是它的这个安装时间可能会很长啊,安装时间就是过长,你虽然说启动时间变短了,但你安装时间可能会很长,所以它各自有各自的优点和缺点,这个叫at,就是咱说的体现编译,然后总结起来呢,简单理解为啊,其实就是这么一段话给大家最终特别说一下啊,就是简单说一下,我们可以理解为这个JT呢,就是我们在。
05:10
程序的运行过程中啊,运行的这个过程中,然后咱们把这个字解码文件转换为这个硬盘上可以直接运行的这个啊,就是可以直接运行的这个机器码,然后最终给他在部署到我们这个环境的一个过程,这个就叫JT,就是一边编译一边运行,或者一边运行一边编译,这是提到的,而AOT什么特点呢?它指的就是在我们程序运行之前,我们就把这个字解码。给它直接转换成这个可以直接运行的机器码,这就是咱们说的这个特点,JT和AOTAOT叫提前编译,或者说叫运行前编译,这是我们提的基本概念,它这么做的目的就是让你的启动时间变得更快,然后把时间都花不到咱这个前面,运行前这个过程,然后你使用时间,比如之前没有这个机制,你可能启动需要一分钟,有这机制之后可能只需要几秒或者几十秒这样的时间。
06:25
这是提到的基本概念,然后下面继续来看啊,大家看我的课件里边,我这里写到。就是我的这段话大家看啊,这里这些刚才都说过了啊,再看这里就是现在,比如我有加号程序,变成自行码文件,然后用这个编译工具变成可执行这个直接执行的机器码,这个点so就是一个程序库啊,它可以供其他程序使用的代码或者数据,这张图中画的也是一个过程,把它直接变成机形码,然后给它链接到这里边,加载过来,最终进行执行,让咱启动速度变得更加的快,这是咱们提到的AUT的基本特点。
07:04
At的优点很明确啊,运行前编译会让你的启动时间变得更短,另外因为它这个产物只有机器码最终,所以造成它的体积会很小。但是也有它的缺点,刚才提到了,因为咱是提前编译,它在运行过程中肯定不能优化。另外因为它是这里边提前编译好的静态的部分,所以它没有动态能力,而同一份这个产物不能跨平态运行。比如现在我在Windows中生成一个可运行这个机器码,你放到别的平台中肯定用不了,别的平台中需要再进行生成,因为它同一份产物不能跨平台运行。这是提到的at的基本概念,大家把这清楚啊,提前编译。然后咱们继续来看啊,就是第一种这个JT,就是边运行边编译Java的虚拟机,大家看这个啊叫hotport,就这就是虚拟机那个品牌,咱们看一下啊,我把这个CMD打开。
08:08
然后在里边呢,直接用命令Java-version,大家看啊,我的这位置是不是叫howport,这就是我们当前这个虚拟机这个品牌,而用这个虚拟机,它是在运行的时候将自检码转成机器码,当然咱用的AOT,它里边是提前编译,这一过程中呢,需要用到一个编辑器,大家看这个叫gra vm啊,通过这编辑器进行支持,其实它也是一种GM,指它是一种支持这种at方式,这种VM。然后它允许在构建的时候将机器码直接变成这个,就是将自己码直接变成机器码这个过程啊,用到这个叫gram vm,其实它这么设计意思是什么呢?更贴近于这个叫云原生这种机制,本身的机制跟它有冲突,用这种机制提前编译,更为了贴近云原生这种机制,包括咱们现在啊,用的这个JDK时期就支持这种机制,AOT提前编译,这大家给他知道啊,所以以上是关于AOT的基本概念,各位给他清楚知道它的特点,知道它的优点以及相关的缺点。
09:21
然后这个之后我们继续来看啊,刚才提到一个编辑器叫gram vm,那咱们做个说明,看什么是VM,一会儿咱会做一个最终演示,咱们来看啊,咱们目前学的框架叫此文六,此文六里边呢,就支持AOT这种编译方式,就是提前编译,而这个gram vm就是它底层的编译器的支持,Sir瑞里边也为它提供了本地镜像的各种支持,而它也是一种高性能JDK啊,它能做到各种功能,包括它提供了在GM里边使用,包括提供这个J就是即时编译,提供了AOT这个提前编译等等,所以咱们现在也是用它,我们会做一个具体的实现,你理解为gram vm就是对AOT支持的一种新型的编辑器。
10:11
它也能实现之前GM中那种即时编译,另外还能做到这个AOT的体现编译,编译可以直接运行的计器码。这个啊,就是第二部分转VM,其实也是一种JVM,只是它支持这种A的方式。然后之后我们再来看啊,看下一个叫native image,大家看这单词native image什么意思呢?是不是叫本地镜像了,那什么意思呢?强调啊,就是在我们目前这个业内中啊,GVM可以进行at方案,另外还有一种方式就是脱离JVM也能实现这个过程,比如说类似于CR加一样,通过它进行编译,编译成这个机器码进行运行,所以现在我们在这过程中就可以用到一个东西叫VMNE隐秘值,做到这个效果啊,包括里边就是用到C加加的环境,最终进行实现,包括在目前啊这S里边六里边就支持AOT,所以它更多是靠这个云原生去发展,包括用到这个native隐秘的这种方式,最终为了让你的运用速度变得更快,进行提前变异。
11:19
所以以上啊就是一个基本的概念上的介绍,因为这个东西啊,它刚出来时间不久,所以它的东西应该说不能算特别成熟,但是spring已经发布了正式版本,所以以后的方向至少在六里边应该都往这方面去发展,AOT体现变异更多是是靠近这个云原声这种方式。这个啊,咱们说到这里基本概念,然后概念说完之后呢,下面呢,咱通过一个例子给大家演示一下这个gra vm进行ne隐秘值过程,就是咱们先进行编译,然后生成一个运行的机器码,最终直接运行啊咱们马上来演示这个gram vm ne5隐秘值的构建过程。
我来说两句