Scala控制台:OutOfMemoryError:超出了GC开销限制

时间:2018-09-03 20:19:56

标签: scala jvm erlang elixir beam

scala:

(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来处理这种情况)

enter image description here

1 个答案:

答案 0 :(得分:2)

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

scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712