scala - 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 来处理这种情况)
解决方案
我不知道 Elixir 如何处理此操作,但它toList
会创建一个包含 100000000 个条目的真实 List 对象。如果您跳过该步骤,该操作也将在 Scala 中成功:
scala> (1 to 100000000).foldLeft(0)((acc,x) => acc + x)
res1: Int = 987459712
推荐阅读
- sparql - 无法使用 GeoSparqrl 和 sfWithin 函数找到点是否在多边形内
- php - 如何使用带返回的 Foreach 数据 Codeigniter
- sql - SSRS 按最接近值对列进行排序
- vue.js - Vue中如何获取表格中的行名和列号?
- r - 为什么 ties.method of rank for 重复值出乎意料地起作用?
- php - 试图将加权 RNG 函数从 php 转换为 python 3,但我很困惑
- sql - SQL Server - 如何从 datetime2 数据类型的毫秒中删除尾随零
- rxjs - observable.subscribe(..).unsubscribe(); 反模式。
- abap - 在文档中的间隙之间生成数字
- sql - pgAdmin/psql 如何将新列的数据导入现有记录?