深入JVM【1】java源码编译机制

1.分析和输入到符号表【parse and Enter】


     parse 过程进行词法分析和语法分析。
        词法分析(com.sun.tools.javac.parser.Scanner)要完成的是将代码字符串转换成token序列。

        语法分析(com.sun.tools.javac.parseParser)要完成的是根据token序列生成抽象语法树。


    enter 将符号输入到符号表

         通常包含确定类的超类型和接口、根据需要添加默认构造器、将类中出现的符号输入到类自身的符号表中等。


2.注解处理【annotation processing】


         主要用于将处理用户自定义的注解。此过程进行完以后再次进入到 parse and enter阶段。


3.语义分析生成class文件【Analyse and Generate】


           Analyse步骤基于抽象语法树进行一系列的语义分析。

                包括将语法树中的名字,表达式等元素与变量,方法,类型等联系到一起;检查使用前是否已声明;推导泛型方法的类型参数;检查类匹配性;进行常量折叠; 检查所有的Checked Exception都被捕获或抛出,检查变量的确定性不重复复制(例如final的变量);解除语法糖(消除if(false)...等无用代码)。将泛型java转换成普通java。自动装箱、自动拆箱等


         Generate 完成语法分析后开始生成class文件。
                生成的步骤:首先将实例成员初始化器收集到构造器中,将静态成员初始化器收集到<clinit>();接着讲抽象语法树生成字节码,采用的方法为后序遍历语法树,并进行最后的少量代码的转换(例如String相加变成StringBuilder操作),最后从符号表生成class文件。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值