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在编译期间对注解进行处理,就像一组编译器插件,可读取,修改,添加抽象语法树的任意元素。
  • 语义分析与字节码生成:对结构上正确的源程序进行上下文有关性质的审查
    • 标注检查:变量使用前是否已被声明,变量和赋值间数据类型是否匹配等
    • 数据及控制流分析:对程序上下文逻辑更进一步验证,可以检查诸如程序局部变量在使用前是否有赋值,方法的每条路径是否都有返回值等
    • 解语法糖:编译阶段还原回简单的语法基础,语法糖用于增加程序的可读性,减少程序代码出错的机会,低糖语言,泛型,变长参数。
    • 字节码生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值