抛出StackOverflowError时Java堆栈会发生什么?

时间:2014-05-20 11:29:18

标签: java stack-overflow

当抛出StackOverflowError时,堆栈是否在Java中清空?

换句话说,如果我编写以下递归,堆栈会发生什么:

public void Test()
{
    System.out.println("TEST");
    try
    {
        Test();
    }
    catch(StackOverflowError e)
    {
        Test();
    }
}

2 个答案:

答案 0 :(得分:1)

catch块中的

Test()方法会抛出另一个StackOverflowError

答案 1 :(得分:1)

这引发了很多StockOverflowErrors!假设您的配置支持的最大堆栈深度为1000次调用,则抛出2 ^ 1000个异常!每次调用Test()都会在try子句中调用一次Test()函数,并在catch子句中调用一次,因此它是一个指数的错误抛出(和捕获),直到最后一个被委托给顶部。

但是要在标题中回答你的问题:堆栈被丢弃,直到捕获异常的函数。