2011-07-06 21 views
5

Scalaプログラムを実行するとjava.lang.StackOverflowErrorが表示されます。スカラースタックサイズを増やす方法は?

私は、スタックサイズは-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が発生しました。これは私の問題を解決しました:ウィンドウ - >環境設定 - >スカラー - >コンパイラ - >詳細設定で追加のコマンドラインパラメータ-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に設定してください。 –

関連する問題