美文网首页
二、JVM系列(从源代码到机器码,发生了什么?)

二、JVM系列(从源代码到机器码,发生了什么?)

作者: 大虾啊啊啊 | 来源:发表于2021-04-27 14:10 被阅读0次

    前端编译器:源码到字节码

    前端编译器也就是我们说的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编译器则将源代码直接编译成本地机器代码

    相关文章

      网友评论

          本文标题:二、JVM系列(从源代码到机器码,发生了什么?)

          本文链接:https://www.haomeiwen.com/subject/sswurltx.html