17611538698
webmaster@21cto.com

10亿行代码,Java 惹性能争议,基准混战其它编程语言

编程语言 0 460 2024-01-09 07:56:40

图片

导读:最近,Java 程序员们将被迫发布最快的解决方案来应对“十亿行代码挑战”,这是 Java 和非 Java 解决方案以及有关编程语言性能在华山之巅的新一轮“较量”。

近日,几位资深开发者发布了新的运行基准来挑战不同流行语言的性能。

有“好事”的资深软件工程师 Gunnar Morling(以前在 Red Hat 工作,现在在 Decodable 工作)向 Java 开发人员发出了新年编程挑战,其目标是“探索现代 Java 语言的优势,并掌握可以将这个平台到底能走多远”。

图片

他出的问题并不复杂。开发人员将被要求“编写一个 Java 程序,用于从文本文件中检索温度测量值并计算每个气象站的最低、平均和最高温度。

图片

挑战地址:https://www.morling.dev/blog/one-billion-row-challenge/

该挑战现在向全球程序员公开征集,代码提交的截止日期为 1 月 31 日。

在撰写本文时,已经有一种使用GraalVM for JDK Community Edition 21(一种使用提前 (AOT) 编译来实现快速启动的 JDK 实现)的领先解决方案,其运行时间为 14.848 秒。

地址:https://github.com/graalvm/graalvm-ce-builds/releases

解决方案是在具有 8 个专用 vCPU 和 32GB 内存、运行于 AMD 处理器和 Fedora 39 Linux 上的云虚拟机上进行评估的。

Java 与其它语言相比速度到底快不快?

在同样功能下,运行速度显示页面中包含 Rust、C#、Go、Python、PostgreSQL、Python、C、C++ 等语言,都是其它网友提交的代码内容。

图片

https://github.com/gunnarmorling/1brc/discussions/categories/show-and-tell

这些语言很难相互比较,这是因为它们在不同的硬件上运行,但也有一些令人印象深刻的结果,包括在 AMD 笔记本电脑上用 C 语言不到 5 秒就完成了结果,还有一个在 Core i5 上运行 5.3 秒的 C# 解决方案。

评估不同编程语言和运行时的性能是一件令人烦恼的事情,因为它很少是相同类型的。

这种情况下的许多解决方案,都有其他开发人员关于如何进一步优化算法的点评,而我们正在比较的是代码质量与原始性能。

另一位名为"吸引人"的开发者发布了25 种语言和运行时的基准测试,他的目的是“关注没有库函数语言本身的性能”。

图片

https://github.com/attractivechaos/plb2

开发人员们“主要是 C 程序员”,承认某些实现可能不是最佳的。虽然如此,它仍然是一个具有启发性的基准代码,包括大量使用嵌套循环、整数运算、矩阵乘法和数组访问来解决包括 15 个皇后问题在内的问题:即一个经典的计算练习,用于计算如何在 nxn 棋盘上放置 n 个皇后,使得没有女王威胁另一个女王。

请见下图:

图片


新基准中语言性能的比较。Matmul 是矩阵乘法的缩写,bedcov 找到大数组之间的重叠


15 皇后问题的执行结果完后,显示出清晰的分组。

C 和 Rust 等系统级编程语言比解释型语言 Python 和 Perl 快五十倍以上。而PHP 和 Ruby 等 JIT(即时编译)语言介于它们两者之间。 

值得注意的是,经过 AOT 编译优化的编程语言一样能够表现良好。包括 C#、Go、Swift 和 Zig 在内跑的 15 皇后问题后,这些语言的性能竟然接近于 C。

接着数独解决问题测试拉开了更大的差距,C# 和 Java 花费的时间竟是 C 和 Rust 的两倍,但仍然比 Python 或 Ruby 快很多倍。

人们还注意到,尽管测试的四个 JavaScript 运行时(Bun、Deno、Node.js 和开发人员自己的 k8)性能接近,但 Bun 跑得是最快的,而 Deno 最慢。

还有另一个关键点:在这种测试中,PyPy 比 CPython 快很多倍。

“尽管 Python 性能不咋好,但它仍然是两种最常用的脚本语言之一,”开发者们纷纷吐槽说。

“未来十年会有一种语言取代Python吗?我看这事儿并不明朗。”

 作者:场长

评论