JVM에서 메모리가 어떻게 관리되어지는지 이해하기 위해 Garbage Collection (GC) 구동원리를 정리한다. 개발 최적화와 서버 튜닝을 위해 이해하고 있어야 한다.
> 작성일 : 2022-03-30
<1> 메모리 영역의 구분
<1-1> Young Generation
- 새롭게 생성된 객체는 Eden 영역에 할당된다.
- Young Generation에서 발생하는 Garbage Collection을 Minor GC 라 한다.
<1-2> Old Generation
- Young Generation에서 계속 사용되고 있다고 판단되는 객체가 Old Generation으로 이동된다.
- Old Generation에서 발생하는 Garbage Colleciton을 Major GC 또는 Full GC 라 한다.
<2> Garbage Collection
<2-1> Mark & Sweep
Mark : 메모리의 사용여부를 식별해 사용(Reachable)과 미사용(Unreachable)로 구분
Sweep : 미사용(Unreachable)으로 구분된 메모리를 해제
Compact : Sweep 과정에 의한 메모리 단편화를 복원
<2-2> Minor GC
Before
After
1) 객체가 생성면 Eden영역에 메모리 할당
2) Eden 영역이 꽉차게되면 Minor GC 실행
2-1) 미사용(Unreachable) 메모리는 해제(Sweep)
2-2) 사용(Reachable)되는 메모리는 Survivor Space(From)로 이동
(두개의 Survivor Space 중 1개는 반드시 UnUsed-미사용 상태)
3) '1)' ~ '2)' 과정이 계속 반복되다가 Survivor Space(From) 가 가득차면 사용되고 있는 메모리를 다른 Survivor Space(To)로 이동
4) 계속 사용될 경우 Old 영역으로 이동
<2-3> Major GC
1) Old Generation 영역이 꽉차게 되면 Major GC 실행
2) JVM이 어플리케이션의 실행을 멈추고 메모리를 수집
* 대부분의 성능개선은 Major GC 로 인한 Stop The World 를 줄이기 위함.
'Concept' 카테고리의 다른 글
[Concept | DevOps] 정의 (0) | 2025.01.05 |
---|---|
[Concept | Java] Garbage Collection 종류 (0) | 2025.01.05 |
[Concept | Architecture] 3Tier (0) | 2025.01.02 |
[Concept | Encryption] 암호화 유형 (0) | 2025.01.02 |
[Concept | Encryption] 암호화의 기본개념 (0) | 2025.01.02 |