首页 > 解决方案 > Scala 控制台:OutOfMemoryError:超出 GC 开销限制

问题描述

斯卡拉:

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

在此处输入图像描述

标签: scalajvmerlangelixirbeam

解决方案


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

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

推荐阅读