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

前言:写这篇文章的目的在于梳理清楚在.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) 表格的存储关系
    这里写图片描述
  3. 语义解析:通俗的说就是检查代码是否符合规范。例如:局部变量使用前是否已经初始化等等;
  4. 生成字节码:将语法树转化生成二机制格式的.calss文件;
  5. 整体上前期编译就上述四个主要步骤,当然随着java程序的日趋复杂(功能的丰富),逐步要加入了其它的一些内容:
    -注解解析:各种框架所支持的注解编程,就是在这一步解析转化成java原生语法的;
    -语法糖剥离:将方便程序员编写代码的语法剥离转化成原生语法。最典型的就是范型;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值