将java编译为本机代码的性能提升?

时间:2008-09-09 06:05:03

标签: java performance

这些天从编译java到本机代码是否有任何性能,或者现代热点编译器最终是否会这样做?

5 个答案:

答案 0 :(得分:4)

最近在问题What are advantages of bytecode over native code?上进行了类似的讨论。你可以在那个帖子中找到有趣的答案。

答案 1 :(得分:4)

更多轶事证据。我曾经在一些性能关键的实时交易金融应用程序上工作过。我同意弗兰克的看法,几乎每当你的问题不是没有编译时,它就是你的算法或数据结构。现代热点编译器使用正确的代码非常好,例如CERN Colt library在编译的优化Fortran的90%以内用于数值工作。

如果你担心速度,我真的推荐一个好的剖析器,并获得关于你的瓶颈所在的证据 - 我使用YourKit并且非常高兴。

在过去几年中,我们只在一个实例中使用本机编译代码来提高速度,这样我们就可以使用CUDA并获得一些严肃的GPU性能。

答案 2 :(得分:2)

你的问题有点大,答案差异很大

  • 如果您正在使用及时编译(JIT)
  • 当您使用时,如果您的流程执行了很长时间

所有最近的JVM都使用JIT,但在旧的JVM上,java代码比原生代码慢几倍。

如果你的服务器运行很长一段时间或批处理,一次又一次地执行相同的代码,那么差异就会很小。

我们用C ++和Java编写了相同的批处理并用不同的数据集运行它,结果差异大约3秒,数据集从5分钟到几个小时。

但要小心,它们是特殊情况,会有一个重要的区别,例如需要大量内存的批次。

答案 3 :(得分:1)

内存性能还是CPU性能?或者这些天他们是一样的吗?

我唯一的证据是轶事并且在另一个平台上:在将一堆渴望CPU的应用程序移植到C#(.NET 2.0)之后,我没有注意到性能的大幅下降(我不认为10%是实质性的)。编写良好的代码似乎在各种体系结构上表现良好。

大多数应用花费/浪费时间:

  • 无法从静态(编译时)分析中受益的IO操作。
  • 不能从静态分析中受益的错误算法。
  • 关键CPU内部循环中的错误内存布局。虽然编译器在技术上可以帮助我们,但我还没有看到真正的编译器做任何有趣的事情。

因此,根据我的经验,除非您正在编写视频编解码器,否则编译Java应用程序与仅仅依赖热点编译器没有任何好处。

答案 4 :(得分:-2)

尝试使用六种不同的实现来实现Hello-World,以检查开销 差别是惊人的。 Java不在图表中,而编译语言也同样出色。如果需要的话,我可以证明所有的证据(可重复)。