자바스크립트 v8 엔진의 가비지 컬렉션 동작 방식
두줄요약
V8 엔진의 세대별 힙 구조와 마이너·메이저 가비지 컬렉션 흐름을 설명했습니다. Orinoco 기술로 stop-the-world 시간을 줄이는 방식을 정리했습니다.
구조와 흐름
- 스택·힙 분리와 New space·Old space 중심의 V8 힙 구조
- 새 객체의 semi space 할당, 생존 객체의 대피와 Old space 승격 흐름
- 세대별 객체 수명 차이를 활용하는 Generational Hypothesis
핵심 내용
- New space의 마이너 GC에서 생존 객체를 To space로 복사하고 공간 역할을 교체하는 Scavenger 방식
- Old space의 메이저 GC에서 Roots 기반 DFS와 Tri-color 마킹, 스위핑, 압축 수행
- 참조되지 않는 객체를 수집 대상으로 판별하는 GC 기준
성능/운영 포인트
- semi space 간 연속적 대피를 통한 메모리 단편화 완화
- Mark-Sweep-Compact의 free-list 재사용과 단편화 페이지 재배치
- stop-the-world 완화를 위한 Orinoco의 Parallel·Incremental·Concurrent·Idle-time GC
적용해볼 점
- 힙의 불필요한 객체 미해제에 따른 메모리 누수와 성능 저하 인지
- V8 메모리·GC 이해를 바탕으로 효율적 메모리 사용과 프로그래밍 패턴 검토




