Heap 영역
에 생성객체의 주소
만 참조 어디서든 참조하고 있지 않은 (Unreachable)
객체가 발생하게 되면 GC가 주기적으로 제거Young generation에서 발생하는 GC -> minor GC
Old generation에서 발생하는 GC -> major GC
GC 동작 과정
1단계
- 객체가 처음 생성 되고 Eden 영역에 age-bit 0으로 할당
- Minor GC에서 살아 남을 때마다 1씩 증가
2단계
- Eden 영역에 객체가 쌓이면 Minor GC가 일어나고 참조 정도에 따라 Servivar 0으로 이동
3단계
- 계속해서 Eden 영역은 신규 객체 생성, 비어있는 Survival 1로 이동하고 살아남은 객체들은 age 1씩 증가1
4단계
- minor GC가 일어나면 비어있는 Survival 0으로 이동 시킨뒤 age 1 증가,
- 이 과정 계속 반복
5단계
- JVM에서 설정해놓은 age bit에 도달하게 되면 Old generation 영역으로 이동
-> 이 과정을 프로모션(= Promotion) 이라고 함6단계
- Old영역에 할당된 메모리 허용치를 넘게 되면, Old 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 GC가 실행
- Old generation 영역의 메모리를 회수하는 GC를
Major GC
- Major GC는 시간이 오래 걸리고, 이때 GC를 실행하는 스레드를 제외한 모든 스레드는 작업을 멈추게 됨 (=
Stop-the-World
)