Консоль Scala: OutOfMemoryError: Превышен предел накладных расходов GC - PullRequest
0 голосов
/ 03 сентября 2018

Скала:

(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 Compiler? (Я знаю, что мог бы использовать Stream или View для обработки этой ситуации)

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Я не знаю, как Elixir обрабатывает эту операцию, но toList создаст реальный объект List с 100000000 записями. Если вы пропустите этот шаг, операция также будет успешной в Scala:

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