00:00
刚才啊,咱们提到了,诶,跟Java虚拟机交互的资金软文件啊,要想生成的话呢,使用的编译器啊,我们称为呢,叫做前端编译器,那我们对于Java当中使用的这个前端编译器啊,哎,进行简单的一个了解啊,做一个了解就可以了。那这呢,是我们在讲上篇的时候呢,我画的一个图啊,就好比是我们人类当中的各种各样的这个语言啊,这个中中文是吧,英语。哎,这个是是法文吧,哎,这个我当时写了,我就忘了是吧,哎,然后呢,这是韩文啊,一看能认出来啊,这个是俄文对吧,这个是日文,这是相关的他们各个国家这个语言啊,这个语言的话呢,经过统一的一个处理啊,就生成这个我们也看不懂的这个哎就称为呢,叫做词解码文件啊,这个统一语言处理的这个结构啊,咱们就称为呢叫编译器。啊叫编译器,这个编译器相较于我们后边啊,在直行引擎当中提到一个git编译器呢,哎,我们给他俩做一个区分,这个呢就成为叫前端编译器,这个呢就称为那叫后端编译器。
01:02
那叫做后端编译器。这个我们知道呢,Java语言是半解释型半编译型的语言,那半解释型半编译型指的呢,主要就是针对于我们这个自减法文件进行执行的时候呢,我们可以选择解释执行,也可以选择呢,是哎这个使用阶编译器先行一个编译啊,编译成自己这个机器指令,然后进行执行。啊,那么在Java语言设计之初的时候呢,咱们在上面也提到过啊,就是我们只有解释器,这也是造成了咱们Java语言给人一个印象啊,就是执行效率比较差的原因。啊,因为解释器呢,相应来说它的执行效率是比较低效的啊。那准确的来说啊,就是大家呢,也都是做过这个开发的,准确的来说的话呢,我们说一个语言,呃,到底是否高效,其实呢,哎,或者这个程序的性能是否高效,跟我们说这个语言啊,其实是没有太大关系的。啊,主要有关系呢,就是它的编译器啊,就是我们泛泛的来讲,其实就是编译器,那障碍元的话呢,在最初没有编译器,只有解释器,所以它逐行解释的话呢,效率一定是比较差的,那后期的话,我们引入了叫GD编译器,叫做即时编译器,对吧,那GD的出现的话呢,我们针对这个热点代码啊进行一个。
02:14
这个呃,翻译成相应的这个机器指令,然后把它呢缓存起来,那您多次执行呢,执行效率就显然呢有一个提升啊,这就提到了我们这个后端的叫git编译器啊,那咱们现在讲解的这个重心呢,是说到这个前端编译器。这个后端编译器呢,属于我们GM中的一部分,前端编译器呢,不是。是吧,还有这个理解啊,前端编译器不是啊,那这个Java源代码呢,它编译的结果呢,是磁解码,那需要呢,有一个结构呢,来诶帮我们去编译成这个词件码,那谁来做呢?就是哎这个前端编译器了,在咱们Java语言当中,咱们这个JDK默认呢,提供的这个编译器呢,呃,前端编译器呢,叫做Java c,这个咱们所有同学应该都比较清楚。啊,我们这个找一下这个JDK啊,我这块安装的一个路径。
03:03
以TDK8为例,找到这个B目录下边呢,有一个Java c这样的一个指令啊,所有同学应该都知道这个Java c呢,这个指令所代表的就是我们说的前端编译器,叫Java c编译器。这个JAC编译器呢,就能够将我们说Java源码呢,翻译成直接码文件。在house虚拟当中没有强制要求咱们说的前端编辑器呢,非得要使用这个Java c,这个大家要了解啊,就相当于知道我们这个前端编辑器的话呢,其实也是可选的,一方面呢,官方给我们提供的呢,叫做Java这个Java c这个特点是什么呢?就是它是进行一个叫全量编译。那这个大家应该都写过啊,比如说我们写了一个这个,我放到这个最后吧。咱们如果呢,声明了一个class啊,比如说就简单写成了叫hello word,那这个类的话呢,我们编译的时候。编译的时候呢,我们就使用Java c啊一个空格,那叫做hello word。点Java对吧,这样呢实现的是一个编译,那这里边这个javac指令调用的呢,就是我们这个javac这个编译器,它呢是进行一个叫全量编译,就是将我们把这个文件里边呢,所有的这个内容啊,都进行一个重新的编译啊,这是它。
04:12
那对于这个eclipse来讲,这个以前我们Java开发呢,主流的用的都是eclipse了哈,这个eclipse的话呢,它有一个呢,叫做呃ec接啊,Eclipse for Java,这个ec接的话呢,它的特点呢是什么呢?就是当我们每次写Java代码的时候,在eclipse当中,当你CTRLS的时候,它会将没有编译的部分呢,进行一个主行编译。那编译的部分呢,就不再编译了,所以说呢,它的这个呃,Ecg的这个编译效率呢,是比较高的。哎,它的编译效率是比较高的啊,这个大家使用一个list的同学呢,应该有所感触,这个感触呢,不是因为呢,你单独用一个list啊,而是呢跟咱们用idea idea呢应该是现在我们主流的Java开发的一个工具了,跟他呢在用的时候大家应该会感受到的一个不同。就是我们在CL当中,大家点右键做一个rise的时候,跟我们在这个idea当中进一个rise时候,明显感觉到idea要慢一些,因为呢idea默认使用的是Java c编译器。
05:08
啊,所以它这个执行效率呢,稍微的差一些是吧,当然呢,这个编译之后的这个质量和效果呢,基本上是一致的。啊,这个大家了解一下。那idea当中我们说除了默认使用的这个Java c之外呢,那大家呢,也可以可选的进行一个修改,改成这个PE的接编译器呢,叫AJC。啊,这个呢,你还得专门的去相关的这个官网进行一个下载啊,进行一个设置才可以啊呃,那一般呢,我们都是用的这个GRC了。那么刚才提到这个eclips,这个ec阶的话呢,它是同时也是咱们tomca啊,这个当中用来编译这个JP文件的。啊,这个JSP文件咱们知道它其实也会对应着一个呃,Sol的一个最码文件对吧?哎,那这时候呢,也是使用的我们这个ecg呢,进行来进行了一个编译啊,那同时的话呢,这个ecj编译器的话呢,还使用了这个GP呢开源的协议啊,这个协议呢,如果大家对开源有所了解的话,这个协议是肯定熟悉的啊,那既然呢,他使用了开源协议了,那要求我们这个ecg这个代码呢,也相应的做了一个公开,大家呢,可以进行一个二次开放啊,这个了解一下就行。
06:14
这是我们说的这个关于这个前端编译器啊,提到了有这样几个啊,包括它的主要特点是什么啊,这个大家稍微关注一下。呃,那下边呢,我们要提一个点,就是前端编译器啊,它不涉及到呢,并不会呢,直接涉及到编译优化的相关技术。就是前列编辑器呢,你用那用这个用这个诶不直接体现我们Java程序的运营效率,因为我们像使用那些炸包啊,里边本身就是自解码文件了已经对吧?啊,那我们去执行的时候才更能够看出来它的一个执行的效率,所以呢,我们针对于效率方面呢,关注的这个编译器呢,其实是后端编译器。啊,后端编译器的典型代表呢,就是我们说这个DT编译器。哈,带就这个GI编译器了啊好,这是我们说的是这个好这个呢,呃,咱们在前面也稍微提到过,包括呢,在讲这个优化的时候,到时候咱们还会再去提啊GI编译器,那提到这个git的话呢,咱们在上面呢,还提到一个叫做AOT。
07:12
啊,这个AOT呢,叫做静态提前编译器,英文呢就是AA啊静态提前编译器什么意思呢,就是。我们这个gid编译器啊,稍微的咱们再多说两句啊,这个GI编译器呢,它是叫即时编译器啊,是在咱们这个程序运行的过程当中。对吧,哎,程序在运行的过程当中,发现呢,某段代码呢,反复的执行,我们称为它叫热点代码,把这个字节码,哎,转换为能够在硬件上执行的这个机器指令。啊,然后并且呢,我们还可以托管到这个环境环境当中是吧,那这个部署到这个托管环境当中啊,那这个AOT编译器是什么呢?它可以直接在这个程序运行之前。啊,将这个磁解码文件呢,直接翻译成这个机器指令。啊,在程序运行之前啊,直接将这个呃自节码文件呢,翻译成这个记忆指令,哎,这样呢,其实一定程度上就打破了这个Java源的一种动态性。
08:07
啊,包括的话呢,我们说啊,一次编译到处运行是吧?呃,因为呢,机器指令它是跟具体的平台相关的,对吧,这个大家了解一下哈,嗯嗯,这个当然这个执行效率会更高一些啊,当然这个AOT目前呢,也只支持于这个,呃,Linux啊64位这个平台啊,行,这个呢,大家整体了解一下,我们提到的这个前端编译器就可以了。
我来说两句