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

前言:写这篇文章的目的在于梳理清楚在.java文件编译成.class文件的过程中,编译器做了哪些事情,为程序带来了哪些好处!

注:此文所描述的“早期(编译期)优化”特指编译器将.java文件转换成.class文件的过程。不包含后期将.class二进制文件编译成机器码的内容。

那么此文将从五个方面来说明早期编译优化的过程:

  • why: 为什么要进行早期编译?
  • what: 编译优化什么?
  • who: 谁来编译优化?
  • when: 何时编译优化?
  • how:怎样编译优化的?

why:为什么要进行早期编译?

将.java格式或其它格式的文件(例如:Groovy、JRuby等)编译转换成jvm能识别的、符号统一规范的.class文件。

what:编译优化什么?

程序源代码,如:.java、.groovy文件等。

who:谁来编译优化?

编译器,如:javac等。

when:何时编译?

程序运行之前,或者说触发编译时。

how:怎样编译优化的?

  1. 词法语法解析:将源代码按照编译规范,转化成特定的符号。并最终构建成语法树。语法树能体现程序的逻辑关系;
  2. 填充符号表:这个很抽象,其作用就是将语法树转化成一张表格,表格中同样能体现程序的逻辑关系。方便后续动作的引用;
    例如:函数func1(para1,para2,para3) 表格的存储关系
    程序编译与代码优化:早期(编译期)优化_第1张图片
  3. 语义解析:通俗的说就是检查代码是否符合规范。例如:局部变量使用前是否已经初始化等等;
  4. 生成字节码:将语法树转化生成二机制格式的.calss文件;
  5. 整体上前期编译就上述四个主要步骤,当然随着java程序的日趋复杂(功能的丰富),逐步要加入了其它的一些内容:
    -注解解析:各种框架所支持的注解编程,就是在这一步解析转化成java原生语法的;
    -语法糖剥离:将方便程序员编写代码的语法剥离转化成原生语法。最典型的就是范型;

你可能感兴趣的:(java)