这为什么会导致编译器崩溃?
我有这样的代码:这为什么会导致编译器崩溃?
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))
它工作正常。
为什么?
Scala编译器在复杂表达式中存在一些问题;如果内存不足(即OutOfMemoryException),则可能是一个错误,但编译器用完堆栈空间的情况更为常见,在这种情况下,您可以添加标记-Xss=256m
(其中数字显然取决于您)来解决这个问题。这对于复杂表达式(例如字符串和列表连接)特别常见。
'256m'堆栈空间有点......极端。即使在最极端的情况下,3m对我来说也是足够的。 – 2012-03-07 20:57:29
我相信这是最大的,是的,这绝对是极端的。尽管如此,我遇到了一些情况(特别是Scala编译器),即使是128m也不足以满足某些表达式。不同的架构可能会有不同的数字,32位和64位等 – 2012-03-08 08:29:47
因为编译器中存在一个错误。你在寻找什么样的答案?我建议你找到合适的地方并报告问题。 – jdigital 2012-03-07 01:08:43
我希望能够解决这个问题,或者解释它为什么会发生(如果它不是一个编译器代码,而是实现中的某些东西)。 – dave 2012-03-07 01:26:05
编译器不应该耗尽内存。它并不是真的在运行这个东西。至于解决方法,我会使用'toMap'方法(反正更好),或者如果你坚持使用变量,'nodeMap ++ =' – 2012-03-07 04:28:05