在我回答这个问题之前,请注意这个问题不是什么:
- Java 比 C++ 慢(或快)吗?
- 为什么 Java 比 C++ 慢(或快)?
这个问题不征求意见,它征求事实 -- 数字。
许多基准测试,例如 https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf或 http://benchmarksgame.alioth.debian.org/测试一些合成的东西,比如 Mandelbrot,或者最多测试一个真实程序的一小部分,比如数组排序。当然,这不会像对整个应用程序进行基准测试那样产生具有代表性的数字。
那么,是否有使用真实、完整应用程序的基准测试,例如:
- 笔记应用程序或文字处理器
- 像 Google map 这样的 map 应用
- 电子邮件客户端
- 网络服务器
它必须是您每天使用的东西 - 一个完整的应用程序,而不是其中的一小部分,例如二叉树或排序数组。
任何性能测量都可以,无论是延迟还是吞吐量。谢谢。
简单的答案是否定的,我很想说它不是
甚至可能,至少在经济上。为此,您必须
与两个不同的团队实现同一个应用程序两次,
同时并行。即便如此:有多少
差异是由于语言,多少相对
团队能力等
归根结底,你无法比较“语言”的性能。
充其量,您可以比较语言的性能
实现,当特定程序员用于特定
任务。从某种意义上说,您感兴趣的是:
你必须和你的程序员一起实现一个特定的应用程序
有和可用的语言实现
你。即使有你寻求的比较,它
不会帮助你太多,因为你会实现
具有不同程序员组的不同应用程序
(他们的技能可能与那些
实现基准)。虽然不同的语言可以
具有使优化或多或少的特征
总的来说,在较大的应用程序中很难(如
与综合基准相反),这些往往被
大的考虑,或被其他特征所抵消
也影响优化:C/C++ 的指针语义是
优化器的祸根;另一方面,优化 Java 将
需要大量的拳击,这也不是微不足道的。 (总的来说:
最容易优化的语言可能是 Fortran。不是
因为语言中固有的任何东西,但是因为
研究人员研究它的时间最长,而且许多
必要的优化技术已成为主流。)
如果你真的担心,你必须让程序员
可供您根据模式编写自己的基准
在您的应用程序中,并由您的程序员实现。
最后:很多真实的应用程序,包括单词之类的东西
处理器、电子邮件客户端或 Web 服务器是 IO 绑定(bind)的;他们的
性能更多地取决于 IO 的速度而不是其他任何东西。
(对于我工作过的大多数大型服务器,我们没有
甚至懒得打开优化器。尽管事实上
他们时间紧迫; CPU 时间只是没有
影响。)