码迷,mamicode.com
首页 > 编程语言 > 详细

Javac编译过程

时间:2017-08-20 18:31:36      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:而不是   1.3   语法糖   注解处理器   mpi   class   虚拟   风格   cos   

 

Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler )把字节码转变成机器码的过程 ;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler ) 直接把*.java 文件编译成本地机器代码的过程。下面列举了这3类编译过程中一些比较有代表性的编译器。

 

  • 前端编译器:Sun的Javac、 Eclipse JDT中的增量式编译器( ECJ ) 。
  • JIT编译器:HotSpotVM的C1、C2编译器。
  • AOT编译器: GNU Compiler for the Java ( GCJ ) 、 Excelsior JET。

 

这3类过程中最符合大家对Java程序编译认知的应该是第一类,在本章的后续文字里, 笔者提到的“编译期”和“编译器”都仅限于第一类编译过程,把第二类编译过程留到下一章中讨论。限制了编译范围后,我们对于“优化”二字的定义就需要宽松一些,因为Javac这类编译器对代码的运行效率几乎没有任何优化措施(在JDK 1.3之 后 ,Javac的-O 优化参数就不再有意 义 )。虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样可以让那些不是由Javac产生的Class文件 (如JRuby、Groovy等语言的Class文件 )也同样能享受到编译器优化所带来的好处。但是Javac做了许多针对Java语言编码过程的优化措施来改善程序员的编码风格和提高编码效率。相当多新生的Java语法特性,都是靠编译器的“语法糖”来实现,而不是依赖虚拟机的底层改进来支持,可以说,Java中即时编译器在运行期的优化过程对于程序运行来说更重要,而前端编译器在编译期的优化过程对于程序编码来说关系更加密切。

从Sun Javac的代码来看,编译过程大致可以分为3个过程,分别是:

  • 解析与填充符号表的过程。
  • 插入式注解处理器的注解处理过程。
  • 分析与字节码生成过程。

这3个步骤之间的关系与交互顺序如图所示。

技术分享

http://blog.csdn.net/coslay/article/details/49601603

Javac编译过程

标签:而不是   1.3   语法糖   注解处理器   mpi   class   虚拟   风格   cos   

原文地址:http://www.cnblogs.com/winner-0715/p/7400544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!