这些天从编译java到本机代码是否有任何性能,或者现代热点编译器最终是否会这样做?
答案 0 :(得分:4)
最近在问题What are advantages of bytecode over native code?上进行了类似的讨论。你可以在那个帖子中找到有趣的答案。
答案 1 :(得分:4)
更多轶事证据。我曾经在一些性能关键的实时交易金融应用程序上工作过。我同意弗兰克的看法,几乎每当你的问题不是没有编译时,它就是你的算法或数据结构。现代热点编译器使用正确的代码非常好,例如CERN Colt library在编译的优化Fortran的90%以内用于数值工作。
如果你担心速度,我真的推荐一个好的剖析器,并获得关于你的瓶颈所在的证据 - 我使用YourKit并且非常高兴。
在过去几年中,我们只在一个实例中使用本机编译代码来提高速度,这样我们就可以使用CUDA并获得一些严肃的GPU性能。
答案 2 :(得分:2)
你的问题有点大,答案差异很大
所有最近的JVM都使用JIT,但在旧的JVM上,java代码比原生代码慢几倍。
如果你的服务器运行很长一段时间或批处理,一次又一次地执行相同的代码,那么差异就会很小。
我们用C ++和Java编写了相同的批处理并用不同的数据集运行它,结果差异大约3秒,数据集从5分钟到几个小时。
但要小心,它们是特殊情况,会有一个重要的区别,例如需要大量内存的批次。
答案 3 :(得分:1)
内存性能还是CPU性能?或者这些天他们是一样的吗?
我唯一的证据是轶事并且在另一个平台上:在将一堆渴望CPU的应用程序移植到C#(.NET 2.0)之后,我没有注意到性能的大幅下降(我不认为10%是实质性的)。编写良好的代码似乎在各种体系结构上表现良好。
大多数应用花费/浪费时间:
因此,根据我的经验,除非您正在编写视频编解码器,否则编译Java应用程序与仅仅依赖热点编译器没有任何好处。
答案 4 :(得分:-2)
尝试使用六种不同的实现来实现Hello-World,以检查开销 差别是惊人的。 Java不在图表中,而编译语言也同样出色。如果需要的话,我可以证明所有的证据(可重复)。