2011-07-06 14 views
5

Bir Scala programını çalıştırdığımda, bir java.lang.StackOverflowError alıyorum.Scala yığın boyutu nasıl artırılır?

Ben yığın boyutu -DXss=n ile ayarlanabilir inanıyoruz ama sistemimde çalışmaz:

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

ekli programı tanıklar sorunu sistemimde.

// 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) 
    } 
} 

Sergio

+1

olduğunu düşünüyorum '@ tailrec' açıklama . –

+1

@ Jean-Philippe: '@ tailrec' sadece 2.8'den beri kullanılabilir. @Sergio: ** Lütfen yeni bir sürüme güncelleyin (şu an 2.9.0.1), Scala 2.7 ile 2.9 arasında büyük gelişmeler oldu. – soc

cevap

10

Ben ne istediğini Ayrıca kuyruk özyinelemeli olması ve derleyici ile bir döngü olarak derler olmadığını kontrol etmesini fonksiyonunu yeniden yazabilirsiniz scala -J-Xss200m

+1

Derleme sırasında Scala IDE'de bir StackOverflowException çalıştım. Bu benim sorunum çözüldü: Pencere -> Tercihler -> Scala -> Derleyici -> Gelişmiş, Ek komut satırı parametreleri altında yapılandırdım: -J-Xss256m –

+0

Yukarıdaki yoruma ek olarak, eclipse.ini dosyasına aynı yapılandırma eklenmelidir Ayrıca, burada açıklandığı gibi (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_). Bunu -Xss256m'ye ayarladığınızdan emin olun. –

İlgili konular