當我執行一個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)
}
}
塞爾吉奧
您也可以重寫你的函數是尾遞歸和檢查編譯器編譯它作爲一個循環的'@ tailrec'註解。 –
@ Jean-Philippe:'@ tailrec'只有2.8纔可用。 @Sergio:**請**更新至最新版本(當前爲2.9.0.1),Scala在2.7和2.9之間獲得巨大改進。 – soc