早期(编译器)优化--javac编译器

Posted 竹马今安在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了早期(编译器)优化--javac编译器相关的知识,希望对你有一定的参考价值。

java语言的“编译期”其实是一段“不确定”的操作过程,可能是指一个前端编译器把.java变成.class的过程,也可能是指虚拟机的后端运行期编译器(JLT)把字节码转变成机器码的过程,也有可能是使用静态提前编译器(AOT)直接把.java文件直接编译成本地机器代码的过程。现在讨论的是第一种编译器。

Javac编译器

①javac的源码与测试

 

运行com.sun.tools.javac.Main的main()方法来执行编译,与命令行中使用javac的命令没什么区别.

编译过程可以分为3个过程:

1.解析与填充符号表过程

2.插入式注解处理器的注解处理过程

3.分析与字节码生成过程

这三个过程的代码逻辑集中在这个类的complie()和compile2()方法中,整个编译最关键的处理就由下面注释的8个方法完成

  initProcessAnnotations(processors);//准备过程:初始化插入式注解处理器


            delegateCompiler =
                processAnnotations//执行注解处理(
                    enterTrees//输入到符号表(stopIfError(CompileState.PARSE, parseFiles//词法分析、语法分析(sourceFileObjects))),
                    classnames);
            compile2()//分析及字节码生成 {
                case BY_TODO:
                while (!todo.isEmpty())
                    generate//生成字节码(desugar//解语法糖(flow//数据流分析(attribute//标注(todo.remove()))));
                break;

}

 

②解析与填充符号表

解析步骤由parseFiles完成。解析步骤包括词法解析与语法解析两个过程

 1.词法、语法解析:

 


以上是关于早期(编译器)优化--javac编译器的主要内容,如果未能解决你的问题,请参考以下文章

JVM理论:(四/1)编译过程——早期(编译期)

早期(编译期)优化

Javac早期(编译期)

执行引擎:程序编译与代码优化

程序编译与代码优化 -- 早期(编译期)优化

Javac编译过程笔记