JAVA, Error : java.lang.StackOverflowError

재귀호출로 발생하는 무한루프
김주혁's avatar
Aug 05, 2024
JAVA, Error : java.lang.StackOverflowError
 

StackOverFlowError

 
Java 프로그램 또는 JVM(Java Virtual Machine)에서 작성되는 모든 스레드에는 Java 힙과 관계가 없는 고유 스택 공간이 있다. 애플리케이션에 사용 가능한 전체 스택 크기는 시작 동안 판별되고 해당 값은 포함할 수 있는 스레드 수를 판별하며 이를 초과하면 다음과 같이 java.lang.StackOverflowError가 발생한다.
 
더 정확히는 스레드가 재귀 호출이나 매우 깊은 메소드 호출 체인을 통해 할당된 스택 공간을 초과하게 되면, 스레드에 할당된 고유한 스택(메소드 호출, 로컬 변수, 그리고 임시 변수들을 저장하는 데 사용된다.) 을 초과하는 요청을 받아들이지 못해 java.lang.StackOverflowError가 발생하게 된다. ⇒ 출처 IBM
 

원인

 
일반적으로 매우 깊은 메서드 호출 체이닝을 통해 스레드에 할당된 스택이 가득차 에러가 발생할 일은 적기 때문에, 대부분은 무한 재귀호출로 인한 루프에 빠지는 경우가 많다.
 
내 경우도 재귀호출로 인한 루프에 빠지게되어 발생했다.
 

해결

 
재귀 호출이 계속해서 발생하는 부분의 코드를 수정해 주고 테스트를 작성해주는 것으로 해결됐다.
 
Share article

vlogue