Java에서 객체는 힙 영역에 저장됩니다. Garbage Collection 이란 힙 영역에서 사용하지 않는 객체를 찾아 삭제하는 것을 의미합니다.
Garbage Collection 단계
Mark
- GC 식별기가 객체 그래프를 탐색하며 활성 객체 체크
- GC 식별기가 접근할 수 없는 객체는 죽은 객체로, GC의 대상


Sweep

Compact
- 활성 객체가 힙의 연속된 공간에 있을 수 있게 메모리 압축

Generational Garbage Collection
- java GC는 객체를 세대 별로 분류함
➡️ 세대에 따라 다른 GC 전략을 사용하기 위해
- Minor GC for young generation
- Major GC for old generation
- 세대별 힙 분류
- young generation
- eden : 새로 생성한 객체가 위치하는 곳
- survivor : s0 영역과 s1 영역 두개의 공간으로 구분
- old generation

Minor GC
- young generation 에 대한 GC
- eden 공간이 다 차면 Minor GC 수행
- s0, s1이 번갈아 from space, to space가 됨
1. eden 공간에 활성 객체와 죽은 객체 존재

2. 첫번째 Minor GC 발생

3. 두번째 Minor GC 발생

- eden
- S0
- 활성 객체 수명 증가 및 S1로 이동
- 죽은 객체 제거
4. 세번째 Minor GC 발생

- eden
- S1
- 활성 객체 수명 증가 및 S0로 이동
- 죽은 객체 제거
5. n번째 Minor GC 발생

- eden
- S1
- 활성 객체 수명 증가 및 S0로 이동
- 8살 활성 객체는 tenured로 이동
- 죽은 객체 제거
Major GC
- old generation 에 대한 GC
- tenured 공간이 다 차면 Major GC 수행
- 채택한 GC 알고리즘에 따라 방식이 달라짐
Java Garbage Collection
Garbage Collection in Java – What is GC and How it Works in the JVM
Java Garbage Collection Basics