일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- MVCC
- Varchar
- 자바
- iterable
- db
- 동시성 문제
- foreach
- gc
- text
- jpa
- 가비지 컬렉터
- Di
- Lock
- MySQL
- 스프링
- java
- 데이터 타입
- iterator
- Locking Read
- 백엔드
- 가비지 컬렉션
- 동시성
- reflection
- Atomic Type
- Synchronized
- CAS
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 메모리의 스택 부분이 꽉차서 더이상 사용가능한 메모리가 없다는 예외가 발생한다.