일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Varchar
- gc
- MySQL
- reflection
- MVCC
- 동시성 문제
- text
- 스프링
- CAS
- Lock
- iterable
- iterator
- db
- jpa
- 백엔드
- java
- 가비지 컬렉션
- Di
- 가비지 컬렉터
- Synchronized
- Locking Read
- foreach
- 데이터 타입
- 동시성
- 자바
- Atomic Type
Archives
- Today
- Total
과정을 즐기자
Error : java.lang.StackOverflowError 본문
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 메모리의 스택 부분이 꽉차서 더이상 사용가능한 메모리가 없다는 예외가 발생한다.