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

问题描述 投票:-2回答: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来处理这种情况)

enter image description here

scala jvm erlang elixir beam
1个回答
2
投票

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

scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712
© www.soinside.com 2019 - 2024. All rights reserved.