排除与基准和基准比较相关的所有明显警告,是否有任何研究(一系列有据可查且无偏见的测试)比较了上述两种语言的平均执行速度?谢谢
5 回答
我所知道的最好的比较是The Computer Language Benchmarks Game。
它比较了(当前)10 个跨大量编程语言的基准测试的速度、内存使用和源代码大小。基准的实施是用户提交的,并且不断改进,因此排名有所变化。
目前比较的是 openjdk 与 C# .NET Core。
这是最近关于该主题的一项不错的研究:
C、C# 和 Java 中的数值性能
彼得·塞斯托夫特 (sestoft@itu.dk)
丹麦哥本哈根 IT 大学
2010-02-19 版本 0.9.1
摘要:我们在三个小案例上比较了 C、C# 和 Java 的数值性能。
...
两种语言在性能方面都在发展。至少在 2013 年,微软自己的 Joe Duffy在博客中写道:
Java 比 C# [在性能上更接近 C++],这要归功于在类似 HotSpot 的 VM 中的出色工作,这些 VM 采用了代码调整和堆栈分配。
这可能会引发一场激烈的战争,但是,嘿,这是我的观点……
首先,如果您的网站运行速度太慢,您将需要更好的硬件。或更多硬件并为您的站点添加负载平衡。如果你是谷歌,你最终会拥有拥有数千台机器的巨大服务器场,这些机器似乎可以提供闪电般的性能,即使这些网站本身是用某种过时的语言开发的。
大多数语言都经过优化,以充分利用其硬件,并且在此特定环境中通过特定设置的性能优于任何其他语言。比较语言没有多大意义,因为有成千上万种技术可以进一步优化它们。此外,您如何衡量绩效?
假设您查看执行速度。语言 X 执行某些任务的速度可能比语言 Y 快 2 倍。但是,语言 Y 更适合运行多线程,并且可以在相同的时间内为语言 X 多 10 倍的用户提供服务。结合这个和 Y 在客户端/服务器环境中会更快。
但是,然后将 X 安装在具有 X 非常喜欢的操作系统的优化系统上,带有额外的硬件、数以亿计字节的内存和磁盘空间以及十几个 CPU,X 将再次击败 Y。
那么,了解语言的执行速度有什么价值呢?甚至是语言的比较?我们怎么知道创建报告的人没有偏见?我们如何确定他们对每种语言都使用了最佳设置?他们甚至编写了要测试的最佳代码吗?无论如何,您如何比较最终结果?每个用户的执行时间?还是总执行时间?
回到语言 X 和 Y。X 在 2 秒内运行一个任务,但它同时只支持 10 个线程,即 10 个用户。Y 需要 6 秒,但同时服务多达 50 个线程。X 每个用户会更快。在两秒钟内,X 处理了 10 个用户。在 6 秒内,X 处理了 30 个用户。但是到那时 Y 已经处理了 50 个用户。因此,当您拥有大量用户时,Y 的表现会优于 X,而在用户数量较少的情况下,X 的表现会优于 Y。(或线程。)看到报告提到这一点会很有趣,对吧?
2021
概述
多年来,使用 Java 或在 .NET/C# 上创建的应用程序具有相似的性能水平。不过,微软和许多第三方贡献者在这方面的优化上已经做出了一些重大的投入,并不断改进。例如,ASP.NET Core Web 框架允许您在单个服务器上每秒处理 700 万个请求。根据 TechEmpower 测试,ASP.NET Core 远远领先于任何 Java Web 框架。
研究
https://github.com/ixy-languages/ixy-languages
这是在 .NET 平台上可以实现的性能的另一个很好的演示——一个用不同语言编写的超快速网络驱动程序的示例。用 C# 编写的驱动程序显示出与 C 和 Rust 几乎相同的性能水平,略好于 Go 语言,并且远远领先于包括 Java 在内的所有其他高级语言。