-1

斯卡拉:

(1 to 100000000).toList.foldLeft(0)((acc, x) => acc + x)

灵药:

1..100000000 |> Enum.to_list |> List.foldl(0, fn x, acc -> x + acc end)

它们具有相同的功能。但是,JVM 只是抛出了 GC 异常,而 BEAM 可以安全地处理它。我只是好奇为什么JVM无法处理这种情况?是JVM的错还是Scala编译器的错?(我知道我可以使用 Stream 或 View 来处理这种情况)

在此处输入图像描述

4

1 回答 1

1

我不知道 Elixir 如何处理此操作,但它toList会创建一个包含 100000000 个条目的真实 List 对象。如果您跳过该步骤,该操作也将在 Scala 中成功:

scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712
于 2018-09-03T20:26:57.570 回答