我在斯卡拉写这个基本程序:斯卡拉意外的堆栈溢出
import scala.collection.mutable.HashMap
object HelloWorld {
val treasureMap = new HashMap[BigInt, BigInt]
def main(args: Array[String]) {
println(fibCache(10))
}
def fibCache(n: BigInt): BigInt = {
if (n == 0 || n == 1) {
return n
}
return treasureMap.getOrElseUpdate(n, fibCache(n - 1) + fibCache(n - 2))
}
}
和我期望与真值很大,我有一个OutOfMemoryError或东西,而是我看到这一点:
Exception in thread "main" java.lang.StackOverflowError
at java.math.BigInteger.compareMagnitude(Unknown Source)
at java.math.BigInteger.compareTo(Unknown Source)
at scala.math.BigInt.compare(BigInt.scala:141)
at scala.math.BigInt.$less$eq(BigInt.scala:145)
at scala.math.BigInt.fitsInLong(BigInt.scala:130)
at scala.math.BigInt.hashCode(BigInt.scala:120)
at scala.runtime.BoxesRunTime.hashFromNumber(Unknown Source)
at scala.collection.mutable.HashTable$HashUtils$class.elemHashCode(HashTable.scala:366)
at scala.collection.mutable.HashMap.elemHashCode(HashMap.scala:43)
at scala.collection.mutable.HashTable$class.findEntry(HashTable.scala:108)
at scala.collection.mutable.HashMap.findEntry(HashMap.scala:43)
at scala.collection.mutable.HashMap.get(HashMap.scala:63)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:186)
at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:43)
有人可以帮助解释为什么吗?另外,有没有我可以用来缓解这种情况的运行时设置? -Xss会有帮助吗?
刚刚在我的机器(3GB的Macbook)上运行它与最新版本的Scala,它按预期运行。 – 2011-05-15 16:39:47
你使用了多大的价值?结果是什么? – 2011-05-15 16:41:17
32/64位,可用物理内存和-Xss参数都将影响问题发生的确切位置,因此不要担心所选的实际数字。只要知道会有*某些*点就足够了,这取决于你的配置。 – 2011-05-15 16:58:24