2011-07-06 124 views
5

当我执行一个Scala程序时,我得到一个java.lang.StackOverflowError如何增加scala堆栈大小?

我相信,堆栈大小可以用-DXss=n进行设置,但它并不在我的系统上运行 :我的系统上

Scala compiler version 2.7.7final and 
    Linux 2.6.38-8-generiC#42-Ubuntu 

附带的程序证人的问题。

// scalac StackOverflow.scala 
// scala StackOverflow 6000 
// scala -DXms=200M -DXmx=200M -DXss=200M StackOverflow 6000 

object StackOverflow { 
    def recur(k: Double): Double = { 
    // check effects of various commands 
    println(k) 
    // try to prevent tail recursion 
    if (k>0) return recur(k-1)+k/(k+1) 
    else return 0.0 
    } 
    def main(args: Array[String]) { 
    if (args.length == 0) println("Missing argument"); 
    val k = args(0).toInt+0.1 
    recur(k) 
    } 
} 

塞尔吉奥

+1

您也可以重写你的函数是尾递归和检查编译器编译它作为一个循环的'@ tailrec'注解。 –

+1

@ Jean-Philippe:'@ tailrec'只有2.8才可用。 @Sergio:**请**更新至最新版本(当前为2.9.0.1),Scala在2.7和2.9之间获得巨大改进。 – soc

回答

10

我想你想要的是scala -J-Xss200m

+1

我在编译时遇到了Scala IDE中的StackOverflowException。这解决了我的问题:我配置窗口 - >首选项 - > Scala - >编译器 - >高级,其他命令行参数:-J-Xss256m –

+0

除了上面的注释,相同的配置需要添加到eclipse.ini正如[此处]所述(http://scala-ide.org/docs/current-user-doc/faq/index.html#I_am_running_out_of_stack_space_in_Eclipse___How_do_I_increase_the_stack_size_)。确保将其设置为-Xss256m。 –