javac编码过程

java编译期:不确定
  • 前端编译器:.java--.class;Sun的javac,Eclipse JDT的增量式编译器ECJ
  • JIT编译器:just in timer compiler虚拟器后端运行期编译器,字节码到机器码;HotSpot VM的C1,C2编译器
  • AOT编译器:静态提前编译器,ahead of time compiler,.java到机器码;GNU compiler for the java,Excelsior JET
前端编译器专注于程序语言编码优化,后端编译器注重程序运行性能优化。
javac编码过程:
  • 解析和填充符号表
    • 词法分析:将源代码的字符流转变为标记Token集合,标记是编译过程的最小元素(单个字符是程序编写过程的最小元素);关键字由多个字符构成,但只是一个Token
    • 语法分析:根据Token序列构造抽象语法树的过程,Abstract Syntax Tree用于描述程序代码语法结构的树形表示方式,每一个节点代表程序代码中的一个语法结构,如包,类型,修饰符等
    • 填充符号表:符号表由一组符号地址和符号信息构成的表格,符号表所登记的内容将用于语义检查和产生中间代码。
  • 插入式注解器的注解处理过程:插入式注解处理器的标准API在编译期间对注解进行处理,就像一组编译器插件,可读取,修改,添加抽象语法树的任意元素。
  • 语义分析与字节码生成:对结构上正确的源程序进行上下文有关性质的审查
    • 标注检查:变量使用前是否已被声明,变量和赋值间数据类型是否匹配等
    • 数据及控制流分析:对程序上下文逻辑更进一步验证,可以检查诸如程序局部变量在使用前是否有赋值,方法的每条路径是否都有返回值等
    • 解语法糖:编译阶段还原回简单的语法基础,语法糖用于增加程序的可读性,减少程序代码出错的机会,低糖语言,泛型,变长参数。
    • 字节码生成

你可能感兴趣的:(javac编码过程)