major GC는 old space를 관리
V8 엔진이 old space 에 여유 저장 공간이 없다고 판단때에 발동
minor GC 사이클을 통해 동적으로 계산
old space에서는 Mark-Sweep-Compact알고리즘을 사용
TRI-COLOR(white-grey-black) 혹은 삼색 마킹 시스템
큰사이즈 minor gc로 하면 안좋다
- Marking: 첫번째 스텝이며,
active
한 객체들과 그렇지 않은 객체들을 식별합니다.GC Roots
(스택 포인터)로부터 접근 가능한 오브젝트들은 재귀적으로active
/alive
마킹되며, 깊이 우선 탐색 (depth first search) 알고리즘입니다.
- Sweeping: GC가 힙 메모리를 스캔하면서
active
로 마킹되지 않은 객체들의 메모리 주소를 저장합니다. 이 공간들은여유 공간
으로 간주되어, 다른 객체 정보를 저장할 수 있게 됩니다.
- Compacting: Sweeping이후에 필요하다면, 살아남은 객체들이 되도록 같은 공간에 존재할 수 있도록 객체들의 주소를 이동시킵니다. 이 절차는 위에 멘션한
fragmentation
을 줄이고, 새로운 객체에 메모리가 할당되는 절차의 퍼포먼스를 향상시킬 수 있습니다.
마찬가지로 Stop the world GC 이라서 단점 최소화를 위해 아래 4개 technique
V8 Incremental GCV8 Concurrent markingV8 Concurrent sweeping/compactingV8 Lazy sweeping