首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有人能量化C++和Java之间的性能差异吗?

有人能量化C++和Java之间的性能差异吗?
EN

Stack Overflow用户
提问于 2018-03-02 05:27:20
回答 2查看 0关注 0票数 0

Java在JIT之前最初很慢,但今天的性能非常接近C ++。我想知道是否有人在两种语言之间做了可测量的性能比较? 与C ++相比,Java的缺点在哪里? Java为开发人员提供了许多生产力增益,因此他们可以更快地编写应用程序,因为垃圾大学,缺乏指针等。例如,如果使用100个开发语言编写的应用程序(如Firefox,Webkit和Open Office) %Java,可能是2倍,但开发人员仍然选择C / C ++出于性能原因。有人可以证明Java不能像C ++那样提供像我提到的那样的应用程序。

我只想补充一点,那就是C ++中仍有很多应用程序正在完成工作。这意味着不仅仅是一个主观的问题。具有较高抽象级别的语言经常支付性能损失。如果不存在这种惩罚,我们都将用更高级的语言进行编程。Java与C ++相比还有什么优势?请明确点。

EN

回答 2

Stack Overflow用户

发布于 2018-03-02 13:39:17

JIT编译器对于许多单独的代码构造可以更快,因为它们可以利用代码的运行时分析。

例如,VonC在回答这个问题时提到了所有对象的堆分配。这实际上并不是这样:JIT可以在堆栈中分配对象,如果通过逃逸分析证明对该对象的引用不会超出堆栈帧的话。通过这种方式,编译器可以获得堆栈分配的性能优势,而程序员可以放心假定GC堆分配的安全性。

同样,Uri提到了虚函数(在大多数非C ++语言中称为虚函数)。这是JIT编译器具有几乎永远不可用于提前(AOT)编译器的优势的另一种情况:JIT可以插入内联廉价类型检查(取消引用字比较)并实际内联虚拟方法调用if那个特定的调用网站恰好是单形的(即实际的类型在实践中总是相同的)。事实证明,在实践中高达95%的虚拟方法调用是单形的,所以这可能是一个非常大的胜利 - 这是AOT编译器很难利用的一个胜利,因为运行时代码加载可能会改变运行时特性动态。

票数 0
EN

Stack Overflow用户

发布于 2018-03-02 14:44:55

语言没有速度。Java或C++语言规范都没有指定“,程序必须编译为有效“。

每种语言都指定程序必须做的事情的列表,或者至少,似乎,这在某些情况下为程序的效率设置了上限,但通常情况下,聪明的编译器可以忽略单个程序中的这些规则,因为重要的是程序的行为。好像规范已经被遵守了。函数可以内联,堆数据可以移动到堆栈,等等。

程序的性能取决于三件事:编译器、底层平台/硬件以及程序代码本身。

不是“语言”。你得到的最接近的是编译器。

有很好的理由可以解释这两种语言都比另一种语言更快。C++做出的承诺可能会减缓程序的执行速度,但Java是JIT的,这意味着它可能利用运行时信息来优化代码,而C++很难做到这一点...。再说一次,规范中没有任何地方说C++必须被激怒了。正如我所相信的,还有一些Java编译器可以生成本机代码,而不是JVM字节码。

你的问题只有当你有一台你正在运行的特定计算机,一种特定的编译器为每一种语言,以及你的程序在每种语言中的具体实现时,才有意义,在这种情况下,您可以同时运行两个以查看哪个最快。...

垃圾收集是另一个很好的例子。当然,垃圾收集意味着一些开销,但它也支持一些重要的快捷方式。在诸如Java或...之类的托管语言中,堆分配非常便宜。NET,因为它被管理和垃圾收集。当然,在C++中,它是...未指定的,但在实践中,它通常非常慢,因为操作系统必须遍历堆,才能在或多或少支离破碎的内存空间中找到一个空闲内存块。哪个最快?取决于操作系统。取决于编译器。取决于源代码。

源代码也有很大的不同。如果您使用Java程序并天真地将其移植到C++,它将执行得很糟糕。C++并不能很好地处理虚拟函数,而且通常可以使用更好的替代方法。在C++中,堆分配可能非常慢,因此,天真地重新实现Java程序将是非常低效的。同样的情况也适用于相反的方向。如果直接移植到Java中,许多C++成语将不必要地缓慢。因此,即使您已经确定了一个平台和一个编译器,您如何比较您的程序的性能?甚至要将它提交到编译器,您必须编写两个实现,然后它就不再是同一个程序了。

但是,我认为可以公平地说,在大多数现代硬件上,使用现代Java编译器和现代C++编译器,大多数程序都可以实现得非常高效,而且速度肯定足够快。但前提是你理解你所使用的语言,并遵守它的规则。如果您尝试用C++编写Java代码,那么Java将神奇地变得更加高效,反之亦然。

我想你的问题最简洁的答案是“不。没有人能量化C++和Java之间的性能差异“;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档