尾部递归的java.lang.OutOfMemoryError

劳尔·何塞·查韦斯(Raul Jose Chaves)

为什么我在调用第一个具有大数的函数(例如2000)并且第二个实现没有错误时,得到java.lang.OutOfMemoryError:Java堆空间?

两者不会保留相同的内存量吗?

object TailRecursion extends App{

  @tailrec
  def repeatString (str: String, n:Integer ): String = {
    if (n == 0) ""
    else if (n == 1) str
    else repeatString(str+str, n-1)
  }

  @tailrec
  def repeatString(str:String, n:Integer, accumulator:String):String ={
    if(n==0) accumulator
    else repeatString(str, n-1, str+accumulator)
  }

  println(repeatString("teste", 0))
  println(repeatString("teste", 1))
  println(repeatString("teste", 2))
  println(repeatString("teste", 2000))
}
疯子

不会。两者都不会保留相同的内存量。

让我们尝试OutOfMemory使用Scala中的for表达式执行出错的操作。它将大致翻译为以下代码:

def repeatStringLoop(string: String, n: Integer): String = {
  var resultString = string
  if (n == 0) ""
  else if (n == 1) string
  else {
    for (i <- 0 until n) {
      resultString = resultString.concat(resultString)
    }    
    resultString
  }
}

如果运行代码,它将抛出相同的错误。这是因为您尝试将每个修改后的字符串连接两次-导致占用更多内存-这与将字符串“ teste”连接到结果字符串不同。

但是,最好将StringBuilder这种字符串连接使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

java.lang.outofmemoryerror异常?

来自分类Dev

java.lang.OutOfMemoryError图片

来自分类Dev

Android java.lang.OutOfMemoryError?

来自分类Dev

AndroidRuntime:java.lang.OutOfMemoryError

来自分类Dev

java.lang.OutOfMemoryError:Android

来自分类Dev

java.lang.OutOfMemoryError图片

来自分类Dev

java.lang.OutOfMemoryError:Android

来自分类Dev

错误是java.lang.OutOfMemoryError

来自分类Dev

java.lang.OutOfMemoryError:Java堆空间

来自分类Dev

java.lang.OutOfMemoryError:Java堆空间?

来自分类Dev

java.lang.OutOfMemoryError-BitmapFactory.decode(strPath)

来自分类Dev

Android由java.lang.outofmemoryerror引起

来自分类Dev

Asynctask中的java.lang.OutOfMemoryError错误

来自分类Dev

ArrayList和java.lang.OutOfMemoryError

来自分类Dev

密码查询给出java.lang.OutOfMemoryError

来自分类Dev

从java.lang.OutOfMemoryError中恢复

来自分类Dev

Eclipse:java.lang.OutOfMemoryError:PermGen空间

来自分类Dev

java.lang.OutOfMemoryError:PermGen空间异常

来自分类Dev

包含ImageViews的ViewPager的java.lang.OutOfMemoryError

来自分类Dev

我的 for 循环中的 java.lang.OutOfMemoryError

来自分类Dev

java.lang.OutOfMemoryError:Java 8的Java堆空间

来自分类Dev

常量dspace错误java.lang.OutOfMemoryError:Java堆空间

来自分类Dev

java.lang.OutOfMemoryError:100000条记录的Java堆空间

来自分类Dev

Eclipse:java.lang.OutOfMemoryError:Java堆空间

来自分类Dev

java.lang.OutOfMemoryError:Grails中的Java堆空间

来自分类Dev

java.lang.OutOfMemoryError:带有蜂巢的Java堆空间

来自分类Dev

NETBEANS:“ java.lang.OutOfMemoryError:Java堆空间”

来自分类Dev

SonarQube分析失败java.lang.OutOfMemoryError:Java堆空间

来自分类Dev

异常java.lang.OutOfMemoryError:Java堆空间

Related 相关文章

热门标签

归档