返回介绍

10.1 概述

发布于 2024-08-16 21:55:05 字数 1057 浏览 0 评论 0 收藏 0

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

前端编译器:Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)[1]

JIT编译器:HotSpot VM的C1、C2编译器。

AOT编译器:GNU Compiler for the Java(GCJ)[2]、Excelsior JET[3]

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

[1]JDT官方站点:http://www.eclipse.org/jdt/。

[2]GCJ官方站点:http://gcc.gnu.org/java/。

[3]Excelsior JET官方站点:http://www.excelsior-usa.com/。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文