Java字节码编译器基准测试

4

问题1. 哪个免费编译器能够生成最优化的Java字节码?

问题2. 哪个免费虚拟机在64位多核CPU上执行Java字节码最快?

问题3. 这个列表中缺少哪些其他(目前活跃的)编译器项目:

问题4. 编译器可以做出哪些JIT不能(或不会)的性能改进?

问题5. 有哪些最近的基准测试、比较或对决(针对Q1或Q2)?

谢谢!

3个回答

5

问题 1:哪个免费编译器可以生成最快的可执行Java字节码?

这个问题不是很有意义。字节码不会被执行。当使用良好的JIT时,编译后的字节码差异不足以影响所产生的机器代码的效率。

问题 2:哪个免费虚拟机可以在64位多核CPU上最快地执行Java字节码?

这个问题更好一些。我认为是JRockit

问题 3:还有哪些(当前活跃的)编译器项目没有列入此列表:

我认为您错过了JRockit。但是,要想得到更完整的列表,您可以查看维基百科:Java虚拟机列表。查找它们是否活跃应该是一个简单的任务。

问题 4:编译器可以进行哪些性能优化而JIT不能(或不会)?

从技术上讲,没有。当涉及到优化时,字节码编译基本上是错误的位置。

问题 5:有哪些最近的基准测试、比较或枪战(针对Q1或Q2)?

Google 是你的朋友。这是两个:

不幸的是,这些没有涵盖那么多的虚拟机。


谢谢!关于编译问题的回复...有一些优化,一些编译器仍然不执行(例如将实例变量初始化为“false”,“null”或“0”)。Sun的编译器(和JIT,我相信)创建并执行那些冗余赋值的字节码。我正在寻找比Sun更“聪明”的编译器,呃,Oracle的。 - Dave Jarvis
JRockit是免费的吗?我记得在生产环境中使用时有附加条件。 - Thorbjørn Ravn Andersen
@Thorbjørn:http://www.oracle.com/technology/software/products/jrockit/faq.html - 我认为不适用于生产环境,但至少FAQ中有很少的直接回答。 - Dave Jarvis

2

Q.4. 编译器可以进行哪些性能优化,而JIT不能(或不会)?

JIT编译器可以执行全局优化。 字节码编译器无法做到这一点,因为它无法看到程序运行期间加载的所有库。

JIT编译器可以根据当前程序执行的观察行为进行分支优化。 字节码编译器无法做到这一点,因为在程序开始运行时,编译器已经退出了。


真的在寻找另一种方式。例如,JIT是否会删除多余的实例变量赋值为“null”? - Dave Jarvis
@Dave Jarvis - 这绝对是JIT编译器可以进行的优化。它是否会这样做只能根据具体情况来回答。 - Stephen C

0

目前唯一可行的替代javac的选择是Eclipse编译器。

看看它。问题是你发现了什么效率低下的地方,以及它是否真的很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接