Suvivor 영역이 2개여서 얻는 이점이 뭐가있을까?
HotSpot VM 의 Minor GC의 동작과정
1. Eden 영역에 새로 생성된 객체들을 할당한다.
2. Eden 영역이 꽉차면 Minor GC를 수행한다.
- Eden 영역에서 할당된 객체 중 Minor GC에서 살아남은(참조되고있는) 객체들은 Survivor 영역중 하나로 이동한다.
- Survivor영역에서 일정 Minor GC횟수만큼 살아남은 객체들은 Old Generation으로 이동한다.
3. 이후 다시 Minor GC가 발생하면, Eden 영역뿐만 아니라 Survivor 영역에 존재하는 객체 중 아직도 참조되는 객체들을 다른 Survivor 영역으로 이동한다.
Survivor 영역이 1개일 경우
Survivor영역이 1개일 경우 Old Generation으로 이동한 객체들에 의해 Survivor영역은 메모리가 파편화 된 상태로 남게 된다.
이러한 문제를 해결하기 위해서는
Minor GC가 발생할 경우 파편화된 공간 사이로 Eden영역에서 살아남은 객체들을 이동시키거나, 기존 Survivor공간의 객체들을 특정 공간으로 이동시켜 메모리 파편화를 막아야 한다.
Survivor 영역이 2개일 경우
Minor GC가 일어나면 다른 Survivor 영역으로 객체를 복사하고, 기존 Survivor 영역을 초기화하여 메모리를 해제하는 과정을 반복하여 메모리 파편화 문제를 방지한다.
'Java & Kotlin' 카테고리의 다른 글
[Kotlin] Nullable Value Class 이슈 - JPA Entity (1) | 2024.02.06 |
---|---|
[Kotlin] 제네릭스(Generics) - 불공변, 공변, 반공변 (1) | 2023.09.06 |
[Kotlin] Kotlin DSL과 Kotest로 Java RestDocs 테스트 리팩토링 하기 (2) | 2023.01.15 |
[Java] equals 메서드 오버라이딩시 주의사항 (0) | 2022.08.29 |
[Java] orElse 와 orElseGet의 차이점 (0) | 2022.08.25 |