为什么paint()不会产生StackOverflowError?

tas*_*ava 2 java stack-overflow

我一直在想:为什么该paint()方法不会生成StackOverflowError?我知道paint()必须在后台重复运行,但是什么限制它只能以计算机可以处理的速度调用它而不会产生StackOverflowError?那么它不会重复paint()到使用太多内存的程度?

Jua*_*rez 6

仅使用递归函数发生堆栈溢出

void paint() {
    // code ...
    paint();
}
Run Code Online (Sandbox Code Playgroud)

堆:

-> stack overflow <-
paint()
...
paint()
paint()
paint()
...
main()
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,会发生以下情况:

while (true) {
    paint();
}
Run Code Online (Sandbox Code Playgroud)

paint() 始终从同一堆栈帧调用