2

假设有两类应用程序:

(1) 密集的数字运算以及数值和数学计算

(2) 密集的字符串正则表达式匹配、xpath 搜索和其他字符串操作,其中字符串主要存储在集合类中。

在这两种情况下,都假设客户端每秒访问这些应用程序数千次,甚至并行访问。

因此,如果我可以选择在服务器后端实现应用程序,我可以选择 Java 7 或 Scala。我应该选择哪一个来获得更快的性能并生成更可靠的代码?

4

4 回答 4

3

谷歌最近做了一些你可能会感兴趣的基准测试 - 请参阅此处链接的论文:http ://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php

这篇论文出人意料地不科学,但你会对可以做些什么有一个粗略的感觉。特别感兴趣的可能是第 VF 部分

Daniel Mahler 通过创建一个功能更强大的版本来改进 Scala 版本,该版本保存在 Scala Pro 目录中。这个版本只有 270 行代码,大约是 C++ 版本的 25%,而且不仅更短,运行时间也提高了大约 3 倍。应该注意的是,这个版本也进行了算法改进,因此不能直接与其他 Pro 版本进行比较。

我不清楚这个具有算法改进的版本是否包含在他们的速度基准表中(我不这么认为),但它确实表明您可以通过采用更可行的算法改进来实现性能改进在斯卡拉。但是,它对于简单的字符串处理不会有太大作用。

一个重要因素将是您在编程这些语言方面的能力,以及您在优化它们方面的能力。Java 显然更冗长,但您不太可能遇到性能“陷阱”。

于 2011-06-21T14:43:35.137 回答
2

有两点可能使数值计算的性能比 Java 更好:

  • 实用的一个:Scala 使并行计算“令人尴尬的并行”问题变得非常容易。虽然在 Java 中也可以做到这一点,但它需要更多的时间和专业知识,因此很可能只在极少数情况下才能做到。

  • 技术之一:Scala 可以为原始类型专门化通用数据结构,从而无需装箱/拆箱。Java 编译器无法做到这一点。

Scala 使用 Java 的 String,因此这里可能的改进非常有限。但是在某些情况下,还有其他数据结构(如绳索)提供比字符串更好的性能。

于 2011-06-21T18:37:28.533 回答
1

根据您的专业知识和努力,我希望您可以在这里或那里获得更好的结果。通常,通过无限量的开发时间和金钱,您可以改进、改进和改进每种语言的代码。(想想越来越大的缓存、专门的分类器、预先计算的默认值等等)。

对这两种语言有很好的理解,并且在你所在领域的性能问题上有一些经验,我不会期望有太大的差异,但是你可以通过更友好的 scala 方法节省一些时间,而在正常开发中节省的时间可能是花费在性能分析和改进上。

于 2011-06-21T15:04:40.483 回答
1

原则上,Scala 在数字运算应用程序中比 Java 更快并没有真正的理由。

如果我想编写一个严肃的高性能数字运算应用程序,我不会选择 Java 或 Scala 或任何其他 JVM 语言。

根据我自己的经验(当然这只是轶事证据,绝对不能证明这在所有情况下都是正确的)JVM 并不是最适合进行大量数字运算的平台。如果原始数字处理速度很重要,您可能会更好地使用更接近“金属”的东西,例如 C++,它允许您使用英特尔 SSE 指令并进行其他低级优化,或使用 GPU如果您的算法适用于CUDA

于 2011-06-22T07:17:01.890 回答