AI Briefing

V8 엔진의 가비지 컬렉션 원리: 마이너 GC와 메이저 GC의 동작 방식

·2022.05.19 09:00

핵심 내용

V8 엔진은 힙을 New와 Old 영역으로 분리해 각각 Scavenger와 Mark-Sweep-Compact 알고리즘으로 관리한다.

1 / 13

자세히 보기

자바스크립트 V8 엔진은 개발자가 수동으로 메모리를 해제하지 않아도 자동으로 메모리를 관리하는 **가비지 컬렉션(GC)**을 수행한다. 이 과정은 Generational Hypothesis에 기반하여 힙 메모리를 New space와 Old space로 분리하고, 각 영역의 특성에 맞는 최적화된 GC 방식을 적용한다.

마이너 GC와 Scavenger 알고리즘

New space는 새로 생성된 객체를 저장하는 영역으로, 대부분의 객체가 짧은 생명주기를 가진다. 마이너 GC는 Scavenger 알고리즘을 사용하여 New space 내의 Semi space 두 개(From space와 To space)를 번갈아 가며 객체를 대피(evacuation)시킨다. 살아남은 객체는 연속적인 메모리로 이동하여 메모리 단편화를 방지하며, 두 번의 마이너 GC에서 생존한 객체는 Old space로 승격된다.

메이저 GC와 Tri-color 마킹

Old space는 오래된 객체를 저장하는 영역으로, 메이저 GC가 Mark-Sweep-Compact 알고리즘을 통해 관리한다. 마킹 단계에서는 Tri-color 알고리즘(White, Gray, Black)을 사용하여 참조 관계를 추적하며, Sweeping 단계에서는 참조되지 않는 흰색 객체를 Free-list에 등록해 메모리를 회수한다. 마지막 Compact 단계에서는 단편화가 심한 페이지를 재배치하여 메모리 효율을 높인다.

Orinoco 프로젝트와 성능 최적화

전통적인 GC는 프로그램 실행을 일시 정지하는 Stop-the-world 현상을 유발하여 사용자 경험(UX)을 저하시킬 수 있다. 이를 해결하기 위해 V8은 Orinoco 프로젝트를 통해 GC를 발전시켰다. 주요 최적화 기술로는 헬퍼 스레드를 활용해 작업을 분산하는 Parallel, 메인 스레드가 간헐적으로 작업을 처리하는 Incremental, 그리고 헬퍼 스레드가 GC를 수행해 메인 스레드의 정지를 없애는 Concurrent 방식이 있다. 또한 크롬과 같은 임베더는 유휴 시간(idle time)을 활용해 GC를 유발하는 Idle-time GC 메커니즘을 제공한다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.