前端编译器:源码到字节码
前端编译器也就是我们说的JavaC编译器,它将Java源代码编译成了字节码(class文件)
image.png
public class Demo{
public static void main(String args[]){
System.out.println("Hello World!");
}
}
例如以上的Java源代码通过JavaC编译器编译后生成一下Class文件
> javac Demo.java
> ls
Demo.java Demo.class
JIT编译器:从字节码到机器码
字节码操作系统是不认识的,也不能运行。当源代码编译成字节码之后有两种选择:
(1)使用Java解释器执行字节码
(2)使用JIT编译器将字节码转换为本地机器代码
两种区别在于前者启动速度快,但运行速度慢。后者启动速度慢,但运行速度快,因为JIT编译器完成第一次编译之后,其会将生成的机器码保存下来,下次直接运行。而我们知道机器码的运行肯定是快于JAVA解释器的。
AOT编译器:源代码到机器码
在程序执行前,生成JAVA方法的本地代码,以便程序运行的时候直接使用本地代码。
小结
在JVM中有三个非常重要的编译器,分别是:前端编译器、JIT编译器、AOT编译器。
(1)前端编译器,也就是我们最常见的Javac编译器,在我们安装JDK的目录中有一个JavaC工具就是它。
JavaC编译器将Java源代码编译成Java字节码文件(也就是我们说的class文件)
(2)JIT编译器最常见的是HotSpot虚拟机中的Client Compiler和Server Compiler,其将字节码文件编译成本地机器代码。
而AOT编译器则将源代码直接编译成本地机器代码
网友评论