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

将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不在图表之列,而编译后的语言同样出色。如果需要,我可以证明所有证据(可重现)。


推荐阅读

    linux交叉编译命令?

    linux交叉编译命令?,工具,平台,位置,网上,环境,基础,代码,编译器,路径,目标,

    linux编译源代码命令?

    linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux只能命令行编译?

    linux只能命令行编译?,系统,代码,工具,软件,密码,平台,项目,设计,最新,设备,L

    linux命令行编译c?

    linux命令行编译c?,代码,环境,系统,工具,平台,终端,程序,编辑,文件,源程序,在

    linux查看性能的命令?

    linux查看性能的命令?,系统,情况,信息,数据,状态,指标,第一,分析,命令,宏观,l

    linux中如何编译命令?

    linux中如何编译命令?,系统,代码,基础,暂停,环境,工具,百度,命令,文件,终端,

    linux编译连接命令?

    linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在l

    linux内核编译命令?

    linux内核编译命令?,系统,软件,环境,电脑,内核,最新,下来,官网,体系,名字,在l

    linux下编译文件命令?

    linux下编译文件命令?,代码,工具,信息,文件,环境,系统,源程序,编译器,终端,

    linux编译项目的命令?

    linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,l

    编译linux命令源码?

    编译linux命令源码?,下来,官网,系统,内核,环境,代码,软件,电脑,工具,源码,Lin

    linux性能测试命令?

    linux性能测试命令?,数据,系统,工具,标准,设备,地址,情况,基础,网络,环境,如

    linux编译执行命令?

    linux编译执行命令?,代码,工具,环境,系统,工作,官网,信息,文件,编译器,终端,l

    如何在linux编译命令?

    如何在linux编译命令?,代码,工具,基础,环境,百度,源程序,语言,文件,终端,编

    linux手动编译命令?

    linux手动编译命令?,代码,时报,基础,工具,百度,环境,标准,语言,源程序,编译

    linux命令3d性能?

    linux命令3d性能?,系统,工具,实时,百分比,信息,分析,软件,情况,网站,建设,Lin

    树莓派linux编译命令?

    树莓派linux编译命令?,系统,技术,电脑,平台,软件,环境,鸿蒙,操作,发文,初学

    linux进入编译器命令?

    linux进入编译器命令?,系统,代码,环境,网上,基础,工作,工具,信息,时间,地址,l

    c语言编译linux命令?

    c语言编译linux命令?,代码,工具,环境,系统,基础,保险,百度,语言,源程序,文件