gpt4 book ai didi

java - stackoverflow异常的原因是什么?

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

import java.math.BigInteger;
import java.util.HashMap;

/**
*
* @author cypronmaya
*/
public class test {
static HashMap<Integer, BigInteger> cache = new HashMap<Integer, BigInteger>();
public static void main(String[] args) {
System.out.println(factorial(20000));
}

public static BigInteger factorial(int n) {
BigInteger ret;
if (n == 0) {
return BigInteger.ONE;
}
if (null != (ret = cache.get(n))) {
return ret;
}
ret = BigInteger.valueOf(n).multiply(factorial(n - 1));
cache.put(n, ret);
return ret;
}
}

Exception in thread "main" java.lang.StackOverflowError at java.util.HashMap.get(Unknown Source)

嗨,为什么我会收到此程序的 stackoverflow 异常?

我知道 stackoverflow 通常意味着你有一个无限循环,但是当我使用 10000 或其他一些较小的数字时,这工作正常,为什么大数字会突然变得无限呢?

最佳答案

当调用堆栈溢出时,会发生StackOverflowError。当您有太多嵌套调用时,就会发生这种情况(因为每个调用都需要在堆栈上保留空间,并且大小有限)。我想在你的情况下,20000 太多了。

您可以使用 -Xss 修改 JVM 的堆栈大小。旗帜。但我建议您找到一种不同的方法来计算阶乘。

关于java - stackoverflow异常的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149067/

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