规模:
(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来处理这种情况)
我不知道Elixir如何处理这个操作,但是toList
将创建一个包含100000000个条目的真实List对象。如果跳过该步骤,则操作也将在Scala中成功:
scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712