美文网首页
JVM之编译

JVM之编译

作者: 飞天的猪_ba05 | 来源:发表于2019-03-14 10:11 被阅读0次

    什么是编译?

    程序员写完代码是.java文件,我们的机器是不认识的。需要通过JVM把字节码翻译成机器语言,而不同平台安装不同版本的JVM即可编译成具有对应平台特性的机器语言。

    编译步骤

    compile-1.png-40.9kB

    前端编译

    我们所熟知的javac的编译就是前端编译。将.java文件编译成.class文件

    下面的步骤歌跟英语语句理解一样

    词法分析

    先分析每个单词有没有拼写错误。

    这里指找出其中我们定义好的关键字,找出规范化的Token流。

    语法分析

    语法有没有错误,比如主谓宾。

    这里指java语言规范(如在if后面是不是紧跟着一个布尔判断表达式),形成一个符合java语言规范的抽象语法树。

    语义分析

    这段语句所表达的意思是否正确。

    这里指将一些难懂的、复杂的语法转化成更加简单的语法,结果形成最简单的语法(如将foreach转换成for循环、注解等)。形成一个注解过后的抽象语法树,这个语法树更为接近目标语言的语法规则。

    中间代码

    通过字节码生产器将经过注解的抽象语法树转化成符合jvm规范的字节码

    该中间代码有两个重要的性质:

    • 易于生成
    • 能够轻松地翻译为目标机器上的语言

    后端编译

    后端编译主要指与目标机有关的部分,包括代码优化和目标代码生成等。

    这部分编译主要是JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译成机器码

    JIT优化

    上面说的后端编译,每次方法执行JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译成机器码。很显然,经过解释执行,其执行速度必然会比直接执行的二进制字节码程序慢很多。为了解决这种效率问题,引入了 JIT 技术。

    JAVA程序先通过解释器进行解释执行,当JVM发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。然后JIT会把部分“热点代码”翻译成本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。

    优化技术

    1. 公共子表达式消除
    2. 数组范围检查消除
    3. 方法内联
    4. 逃逸分析

    上面优化技术,具体的不展开了。因为工作上没怎么用到过,只需要了解就行了

    相关文章

      网友评论

          本文标题:JVM之编译

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