2014-01-15 2 views
2

나는 왜 paint() 메서드가 StackOverflowError를 생성하지 않는지 궁금해하고있다. paint()은 백그라운드에서 반복적으로 실행되어야한다는 것을 알고 있지만 컴퓨터가 StackOverflowError를 생성하지 않고 처리 할 수있는 속도로만 호출하도록 제한하는 것은 무엇입니까? 너무 많은 메모리를 사용하는 시점까지 paint()을 반복하지 않도록 하시겠습니까? 무슨 일이 일어나고왜 paint()가 StackOverflowError를 작성하지 않습니까?

-> stack overflow <- 
paint() 
... 
paint() 
paint() 
paint() 
... 
main() 

그러나 다음 귀하의 경우 :

+1

'paint '의 구현에서'paint'를 다시 호출하는 것으로 보이는 코드는 무엇입니까? –

+1

스택 오버플로는 (거의 항상) 지나치게 커지는 리시브 함수로 인해 발생합니다. 무엇인가 계속해서 호출하면 StackOverflow가 발생하지 않습니다 (그러나 사용 가능한 모든 CPU를 다 써 버릴 수도 있고 다른 응용 프로그램을 느리게 할 수도 있습니다) –

+1

StackOverflowError가 무엇인지, 그 원인은 무엇입니까? 무한 재귀 호출을 덮어 쓰지 않는 한'paint()'메쏘드와 아무런 관련이 없다. – BackSlash

답변

6

스택 오버플로는 재귀 함수

void paint() { 
    // code ... 
    paint(); 
} 

스택에서 발생

while (true) { 
    paint(); 
} 

paint()가에서 항상 호출되는 동일한 스택 프레임

관련 문제