gpt4 book ai didi

Scala 意外堆栈溢出

转载 作者:行者123 更新时间:2023-12-02 07:47:20 25 4
gpt4 key购买 nike

我用 Scala 编写了这个基本程序:

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 有帮助吗?

最佳答案

StackOverflowError 是内存不足这一主题的变体,它只是准确地指出哪个内存区域已用完。

是的,-Xss 有所帮助,但还有更好的方法....

此页面有几个可供您尝试的替代实现:http://en.literateprograms.org/Fibonacci_numbers_(Scala)

您需要使用尾递归或基于流的变体来减小堆栈大小。

关于Scala 意外堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com