天天看点

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

前面已经学习过jvm的内存系统、执行系统,现在来看下jvm的编译系统。

下图第一排和第三排那条分支是传统编译原理中程序代码到目标机器代码的生成过程,而中间那条分支就是解释执行的过程。

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

前端编译器

前端编译器是指把java文件编译成.class字节码文件的编译器,如Sun的javac,Eclipse JDT中的增量式编译器(ECJ),前端编译器基本不会对代码进行优化,它的主要作用是改善程序员的编码风格和提高编码效率。相当多的java语法特性,都是靠编译器的"语法糖"来实现的,例如泛型、for each语法、可变参数等语法。

javac编译器是使用java语言实现的。

编译过程

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

解析与填充符号表

解析过程包括词法分析和语法分析两个步骤。

词法分析:

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

语法分析:

经过语法分析获得抽象语法树后,编译器就基本不会对源码文件操作了,后续的操作都建立在抽象语法树之上。

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

填充符号表:

词法分析和语法分析后,下一步就是填充符号表,符号表是由一组符号地址和符号信息组成的表格,可以把它想成哈希表中的K-V对的形式。

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

注解处理

虽然这个步骤名字叫注解处理,但实际上注解处理器可以处理语法树的任意节点,所以通过这一步我们可以添加、修改、删除语法树中的任意节点。

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

语义分析与字节码生成

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

语义分析分为标注检查和数据及控制流分析两个步骤。

  • 标注检查

标注检查步骤检查的内容包括诸如变量使用前是否已声明、变量与赋值之间的数据类型是否能够匹配等。

  • 数据及控制流分析
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
  • 解语法糖
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
  • 字节码生成
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

编译器

即时编译器

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

编译优化技术

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

公共子表达式消除

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

数组边界消除

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

方法内联

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术
深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术

逃逸分析

深入理解jvm读书笔记17 jvm编译系统前端编译器即时编译器编译优化技术