Terminologies
GC - Garbage Collection 쓰레기 수집
메모리 관리 기법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요없게 된 영역을 해제하는 기능. 자바의 경우 힙에 할당된 메모리가 가비지 컬렉션의 대상이 된다.
Stop-the-world
GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤
Note!)
GC도 그냥 JVM이 실행하는 쓰레드 중 하나임
GC 튜닝
GC는 순수 오버헤드이다. GC의 알고리즘 및 파라미터를 조절하는 GC 튜닝을 통해 stop-the-world 시간을 줄여 애플리케이션의 성능을 높일 수 있다.
GC Algorithm - 매우 많다.
- Reference counting

- Mark and Sweep - JVM의 동작 방식

Mark/ Sweep/Compaction
Mark reachable references → Sweep unrachable references (→ compaction)
ㅤ | Mark and Sweep | Reference Counting |
순환 참조 | 해결 | 미해결 |
실행 시점 | 의도적으로 실행 시점을 정해야 함 | 객체의 reference count가 0 이 되는 순간 |
JVM GC
- JVM Root Set
- Java 스택, 즉 Java 메서드 실행 시에 사용하는 지역 변수와 파라미터들에 의한 참조
- 네이티브 스택, 즉 JNI(Java Native Interface)에 의해 생성된 객체에 대한 참조
- 메서드 영역의 정적 변수에 의한 참조

유효한 최초의 참조
- GC의 대상이 되는 JVM의 Heap 구조
- Weak general hypothesis
- 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
- 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
- Young generation → Minor GC
- Old generation → Major GC
