Thread.sleep()是否可以防止StackOverflow错误?

Dum*_*ode -1 java stack-overflow

以下代码最终会抛出StackOverflow错误吗?

public class TestStackOverflow {
    public static void main(String args[]) {
        recursion();
    }
    public static void recursion() {
        try {
            Thread.sleep(100);
        } catch(Exception err) {}
        recursion();
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎可以Thread.sleep(100);防止StackOverflow错误,但我想知道是否会抛出超时StackOverlow错误?为什么减慢递归会阻止它呢?我想我大多不确定StackOverflow是什么以及为什么这似乎会阻止它?

Mat*_*all 7

是否可以Thread.sleep()防止StackOverflow错误?

没有.

以下代码最终会抛出StackOverflow错误吗?

是.

似乎可以Thread.sleep(100);防止StackOverflow错误

为什么?


rge*_*man 5

Thread.sleep无法阻止一个StackOverflowError.它不会将堆栈帧从堆栈中移除.它所做的只是推迟错误.每个方法调用占用堆栈内存.通过在不停止的情况下进行递归调用,所有这个程序都会在每次调用时占用更多的堆栈内存,最终将其填满并导致错误.

取出Thread.sleep几乎立即产生错误.

将其更改为Thread.sleep(1);(每次睡眠1毫秒)会使程序花费大约11秒钟来在我的机器上产生错误.