【问题标题】:Does speed differ for different compiled languages? (e.g. Java vs. C++)不同编译语言的速度是否不同? (例如 Java 与 C++)
【发布时间】:2011-12-11 08:25:02
【问题描述】:

我在编程方面有点菜鸟,但我想知道你是否用两种不同的编译语言(即 java 和 c++)编写了两个相同的程序并在编译它们之后运行它们,运行时是否不同或只是编译时间不同?

【问题讨论】:

标签: compilation runtime


【解决方案1】:

经验法则被解释(即时编译)比预编译慢,编译到像 Java 这样的虚拟机比依赖架构慢,程序比 OO 快,汇编程序比程序快,(但你不'不想使用它,除非您正在为工业应用程序编写诸如 PIC 微控制器之类的东西,或者您是 Neo 和编程绝地之间的某种混合体)

不管怎样,每种语言都有一些优点和缺点,而且一个好的优化(识别瓶颈并提高那些特定点的性能)可以让你的程序运行得比任何其他粗心的实现更快,无论是哪种语言......

【讨论】:

  • 但是,这是大写的经验法则(即难以置信的近似和过度概括)。例如,JIT 编译器(如 HotSpot)可以更积极地优化(内联间接/virtual 调用和跨动态加载的库),而当今的主流 C 编译器可以在 99% 的时间内胜过大多数人。
  • 编译器不断改进是对的,但我仍然不知道:如果你想确保事情正确完成,你必须自己制作。大多数编译器针对大型应用程序进行了超出可接受的优化,但我不认为自己使用 gcc 为 LED 或传感器微控制器甚至基本工业机器人手臂编译程序,尽管我在技术学校的朋友告诉我他们正在教书现在...
  • @delnan:有没有人测量过 Java 在一个非平凡的应用程序上比 C 更快? (不是通过使用玩具 C 编译器或任何东西来作弊。)我问是因为我经常听到这种激进的优化论点,但我从未见过它在现实世界中成功。但是话又说回来,我看到 PHP 的性能优于 Java,可能是因为 Java 代码并不是完全最优的(阅读:可能会被单个客户端反复单击鼠标以切换设置进行 DoS)。某处埋藏着一堂课……
  • @LnxPrgr3 我不太关注 Java 生态系统,但我知道 PyPy 的 JIT 可以根据运行时值生成更专业的代码(例如,生成两个 str() 调用 - 这也可能是 type -specialized - 用于"<{0},{1}>".format(point) 的低级字符串操作,其中格式字符串来自文件;参见morepypy.blogspot.de/2011/08/…),但“非平凡的应用程序”更难进行基准测试。是的,这里有一个教训——“快速语言”只是一个下限,无论你可以做得多么好,你都可以做任意坏事。
【解决方案2】:

Java 代码比 C++ 慢。与任何研究一样,这些数字可能会有很大差异。您通常会看到 20% 比 C/C++ 慢,因为它最有利于 Java。 Wikipedia compares他们更详细。

其他消息来源称它使用50% more memory

简而言之:Java 比 C、C++ 和其他编译为机器码的语言慢(相对于 Java 的 bytecode)。

【讨论】:

  • 抱歉,我的一个链接格式不正确。它已修复。
  • 只是笼统地说“Java 代码比 C++ 慢”势必会受到挑战,所以我将扮演魔鬼的拥护者……看看en.wikipedia.org/wiki/Java_performance,或者放弃对 Java 的引用字节码或提及 JIT 编译器。
  • 您可以随意编辑我的答案,但我不知道它会如何更快。您链接到的维基百科页面说,“编译器无法完全优化程序,因此生成的程序比本机代码替代品慢。”在 JIT 的上下文中。 (我的回答中可能使用了错误的术语,比如字节码。如果你能改变它们会很好。)
  • 如果 JIT 生成的代码与 C++ 编译器生成的代码相同,那就再快不过了。但它可以产生更好的代码!请参阅en.wikipedia.org/wiki/Java_performance#Program_speed(包括参考资料)。另一个例子是 morepypy.blogspot.com/2011/08/…,它甚至不是 Java,而是一种“解释性语言”(Python),但它设法内联和展开库调用,这是 gcc 在设计上无法做到的。
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 2021-04-20
  • 2011-02-14
  • 2018-03-04
相关资源
最近更新 更多