2011-07-06 49 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。 –