과정을 즐기자

Error : java.lang.StackOverflowError 본문

Error 정리

Error : java.lang.StackOverflowError

320Hwany 2022. 8. 23. 08:48

java.lang.StackOverflowError
at jpabook.jpashop2.domain.Order.setDelivery(Order.java:55)
at jpabook.jpashop2.domain.Order.setDelivery(Order.java:55)
at jpabook.jpashop2.domain.Order.setDelivery(Order.java:55)
at jpabook.jpashop2.domain.Order.setDelivery(Order.java:55)
at jpabook.jpashop2.domain.Order.setDelivery(Order.java:55)

...

 

이 에러는 메모리가 꽉 찰 경우 JVM이 에러를 발생시킨다. java.lang.StackOverflowError 이 에러는 사용가능한 메모리가 더 이상 없다는 뜻이다.

 

public void setDelivery(Delivery delivery) {
    this.setDelivery(delivery);
    delivery.setOrder(this);
}

문제는 다음과 같이 setDelivery 메소드안에 계속 setDelivery 메소드를 호출해 무한루프가 된다...

 

public void setDelivery(Delivery delivery) {
    this.delivery = delivery;
    delivery.setOrder(this);
}

다음과 같이 수정했더니 오류 해결!!

 

모두 이런 경우는 아니겠지만 메소드를 무한으로 호출하지는 않는지 확인해보면 좋을 것 같다.

무한으로 호출하면 JVM 메모리의 스택 부분이 꽉차서 더이상 사용가능한 메모리가 없다는 예외가 발생한다.