为什么这会使编译器崩溃?

时间:2012-03-07 00:51:43

标签: scala sbt

我有这段代码:

var nodeMap:Map[Int, List[Node]] = Map[Int, List[Node]]()

nodeMap = Map[Int, List[Node]]() ++ nodes.par.groupBy( x => x.getClosest(centers))

x.getClosest返回一个Int。当我去编译它时,编译器崩溃说它没有内存。但是,当我这样做时:

var nodeMap:Map[Int, List[Node]] = Map[Int, List[Node]]()

nodeMap = nodes.groupBy( x => x.getClosest(centers))

工作正常。

为什么呢?

1 个答案:

答案 0 :(得分:5)

Scala编译器在复杂表达式方面存在一些问题;如果你的内存不合适(即OutOfMemoryException)它可能是一个bug,但更常见的情况是编译器耗尽堆栈空间,在这种情况下你可以添加标志-Xss=256m(其中数字是显然由你来解决这个问题。这在复杂表达式(例如字符串和列表连接)中尤为常见。