首页 / 知识

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

2023-04-14 15:49:00

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

Performance gain in compiling java to native code?

如今,从将Java编译为本地代码是否可以获得任何性能,还是随着时间的流逝,现代的热点编译器最终都会这样做吗?


一些轶事证据。我已经研究了一些对性能至关重要的实时交易金融应用程序。我同意弗兰克的观点,几乎每当您的问题不是缺少被编译时,而是您的算法或数据结构。现代的热点编译器非常适合使用正确的代码,例如CERN Colt库在为数字工作而编译,优化的Fortran的90%之内。

如果您担心速度,我真的会推荐一个好的Profiler并获得有关您瓶颈所在的证据-我使用YourKit感到非常满意。

在过去的几年中,我们仅在一次实例中求助于本机编译代码,因此我们可以使用CUDA并获得出色的GPU性能。


最近,在这里有一个类似的讨论,问题是字节码比本机代码有什么优势?您可以在该线程中找到有趣的答案。


您的问题有点大,答案相差很大

  • 如果您使用的不是即时编译(JIT)
  • 使用时,是否长时间执行了进程

所有最新的JVM都使用JIT,但是在旧的JVM上,Java代码比本地代码慢几倍。

如果您的服务器长时间运行或成批运行,并且一次又一次地执行相同的代码,则两者之间的差异非常小。

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

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


内存性能还是CPU性能?还是这些天都一样?

我唯一的证据是轶事,并且在另一个平台上:将大量需要CPU的应用程序移植到C#(.NET 2.0)之后,我没有发现性能上的实质损失(我认为10%的水平并不重要)。编写良好的代码似乎在各种体系结构上都表现良好。

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

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

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


尝试用6种不同的实现方法来检查Hello-World只是为了检查开销
区别是惊人的。 Java不在图表之列,而编译后的语言同样出色。如果需要,我可以证明所有证据(可重现)。


编译本机代码性能提升性能

最新内容

相关内容

猜你喜欢