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是什么以及为什么这似乎会阻止它?
是否可以
Thread.sleep()防止StackOverflow错误?
没有.
以下代码最终会抛出StackOverflow错误吗?
是.
似乎可以
Thread.sleep(100);防止StackOverflow错误
为什么?
Thread.sleep无法阻止一个StackOverflowError.它不会将堆栈帧从堆栈中移除.它所做的只是推迟错误.每个方法调用占用堆栈内存.通过在不停止的情况下进行递归调用,所有这个程序都会在每次调用时占用更多的堆栈内存,最终将其填满并导致错误.
取出Thread.sleep几乎立即产生错误.
将其更改为Thread.sleep(1);(每次睡眠1毫秒)会使程序花费大约11秒钟来在我的机器上产生错误.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |