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


推荐阅读

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    优化PostgreSQL中的批量更新性能

    优化PostgreSQL中的批量更新性能,数据,表格,在Ubuntu 12.04上使用PG 9.1. 我们目前需要24小时才能运行大量UPDATE数据库上的语句,其形式

    诺基亚威图性能好到哪里

    诺基亚威图性能好到哪里,诺基亚,手机,诺基亚威图性能好到哪里这是一部以前列出的手机。即使当时配置不高,该品牌的手机也不依赖于该功能吸

    魅蓝note6性能参数有哪些

    魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

    国产电脑cpu测试|国产CPU性能

    国产电脑cpu测试|国产CPU性能,,国产CPU性能天玑9000答: 天玑9000更厉害。因为天玑9000是 最新发布的cpu,也是现在的天花板。而麒麟9000是 2

    主流电脑cpu性能分析|cpu性能对比表

    主流电脑cpu性能分析|cpu性能对比表,,1. cpu性能对比表一、参数对比1、r7 5800H:制程工艺为7nm,主频3.2GHz,睿频4.4GHz,线程数是8核16线程,45W

    新老酷睿i3性能对比试验i34130和i33220

    新老酷睿i3性能对比试验i34130和i33220,,新的英特尔酷睿i3-4130 Haswell处理器架构已经推出了很长一段时间,虽然市场的时间还不长,已经成为

    电脑显卡240|电脑显卡性能排行

    电脑显卡240|电脑显卡性能排行,,电脑显卡性能排行1、RTX 3090:这款显卡被称为地球最强,强的一塌糊涂,不论什么样的游戏都能完美的驾驭。2、Ti