5

在我回答这个问题之前,请注意这个问题不是什么:

  • Java 比 C++ 慢(或快)吗?
  • 为什么 Java 比 C++ 慢(或快)?

这个问题不征求意见,它征求事实——数字。

许多基准测试,如https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdfhttp://benchmarksgame.alioth.debian.org/测试合成的东西,如 Mandelbrot,或充其量只是真实程序的一小部分,例如数组排序。当然,这不会像对整个应用程序进行基准测试那样产生代表性数字。

那么,是否有一个使用真实完整应用程序的基准测试,例如:

  • 笔记应用程序或文字处理器
  • 像谷歌地图这样的地图应用
  • 电子邮件客户端
  • 网络服务器

它必须是你每天都在使用的东西——一个完整的应用程序,而不是像二叉树或排序数组那样的一小部分。

任何性能测量都可以,无论是延迟还是吞吐量。谢谢。

4

2 回答 2

1

简单的答案是否定的,我很想说这甚至是不可能的,至少在经济上是不可能的。为此,您必须使用两个不同的团队同时并行实施两次相同的应用程序。即便如此:有多少差异是由于语言,有多少是由于团队的相对能力等等。

最后,您无法比较“语言”的性能。充其量,您可以比较语言实现在特定程序员用于特定任务时的性能。从某种意义上说,这就是您所感兴趣的:您必须使用您拥有的程序员和您可用的语言实现来实现特定的应用程序。即使有您寻求的比较,它也对您没有多大帮助,因为您将与不同的程序员组(他们可能具有与实施基准测试的程序员不同的技能)实现不同的应用程序. 虽然不同的语言确实具有使优化或多或少困难的特性,但总的来说,在更大的应用程序中(与综合基准测试相反),这些往往被大的考虑所抵消,或者被其他也影响优化的特性所抵消:C/C++ 的指针语义是优化器的祸根;另一方面,优化 Java 将需要大量的装箱,这也不是微不足道的。(FWIW:最容易优化的语言可能是 Fortran。不是因为该语言有任何内在的东西,而是因为研究人员研究它的时间最长,而且许多必要的优化技术已经成为主流。)

如果您真的很担心,您将不得不让可用的程序员根据您的应用程序中的模式编写他们自己的基准测试,并由您的程序员实现。

最后:很多真实的应用程序,包括文字处理器、电子邮件客户端或 Web 服务器等都是 IO 绑定的;它们的性能更多地取决于 IO 的速度。(对于我工作过的大多数大型服务器,我们甚至都没有费心打开优化器。尽管它们对时间很关键;CPU 时间只是没有影响。)

于 2013-10-18T08:42:57.463 回答
-7

Java 比 C++ 慢,而且不能是其他方式。原因是 C++ 编译成 OS 可以理解的本机 OS 二进制代码。Java 代码编译成二进制 .class 文件,由 JVM 执行。与 C++ 相比多了一层。所以,它更慢。

于 2013-10-18T08:13:28.783 回答