Scala vs Java,性能和内存?

我热衷于研究Scala,并提出了一个似乎无法找到答案的基本问题:一般来说,Scala和Java在性能和内存使用方面是否有所不同?

回答:

Scala使得无需意识到即可轻松使用大量内存。这通常非常强大,但有时可能很烦人。例如,假设您有一个字符串数组(称为array),以及从这些字符串到文件的映射(称为mapping)。假设您要获取地图中所有来自长度大于两个的字符串的文件。在Java中,您可能

int n = 0;

for (String s: array) {

if (s.length > 2 && mapping.containsKey(s)) n++;

}

String[] bigEnough = new String[n];

n = 0;

for (String s: array) {

if (s.length <= 2) continue;

bigEnough[n++] = map.get(s);

}

ew!辛苦了 在Scala中,执行相同操作的最紧凑的方法是:

val bigEnough = array.filter(_.length > 2).flatMap(mapping.get)

简单!但是,除非你非常熟悉的藏品是如何工作的,你可能不知道的是,这样做会创建一个额外的中间阵列(这种方式filter),和一个额外的对象

数组的每一个元素

(有mapping.get,它返回一个选项)。它还创建了两个函数对象(一个用于过滤器,一个用于flatMap),尽管由于函数对象很小,所以这很少成为主要问题。

因此,基本上,内存使用量在原始级别上是相同的。但是Scala的库具有许多强大的方法,可让您轻松地创建大量(通常是短暂的)对象。垃圾收集器通常可以很好地处理这种垃圾,但是如果您完全不了解正在使用的内存,那么Scala可能会比Java更快地遇到麻烦。

请注意,计算机语言基准游戏Scala代码以类似Java的风格编写,以获得类似Java的性能,因此具有类似Java的内存使用量。您可以在Scala中做到这一点:如果您编写的代码看起来像高性能的Java代码,那么它将是高性能的Scala代码。(您

也许 可以使用更惯用的Scala风格编写它,但仍然可以获得良好的性能,但这取决于具体情况。)

我应该补充一点,每花时间进行编程,我的Scala代码通常比Java代码 更快,

因为在Scala中,我可以花更少的精力完成乏味的非性能关键部分,并花更多的精力优化算法和性能关键部件的代码。

以上是 Scala vs Java,性能和内存? 的全部内容, 来源链接: utcz.com/qa/406725.html

回到顶部