Files
2nd/01_Archive/2026-04-20/마이너 가비지 컬렉션(Minor GC).md
T

4.2 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-4E47A6 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [P-Reinforce] Continuous Worker - 마이너 가비지 컬렉션(Minor GC)

마이너 가비지 컬렉션(Minor GC)

📌 한 줄 통찰 (The Karpathy Summary)

지식 요약 정보 추출 중...

📖 구조화된 지식 (Synthesized Content)

발생 조건 및 메모리 공간 마이너 가비지 컬렉션은 V8 엔진의 '새로운 공간(New Space)' 혹은 '젊은 세대(Young Generation)'에 객체를 할당할 때, 할당 포인터가 공간의 끝에 도달하여 여유 메모리가 고갈되면 트리거됩니다 [1, 2, 7]. 이 공간은 빠르게 가비지 컬렉션이 이루어지도록 보통 1MB에서 64MB 사이의 비교적 작은 크기로 유지됩니다 [1, 2, 8].

Scavenge 알고리즘 동작 방식 마이너 GC는 '스캐빈저(Scavenger)' 알고리즘을 통해 수행되며, V8은 새로운 공간을 정확히 반으로 나누어 'From-Space'와 'To-Space'라는 두 개의 세미 스페이스(Semi-space)로 운영합니다 [2, 5].

  • 식별(Marking): GC는 루트 객체(스택, 전역 변수 등) 및 구세대에서 신세대를 참조하는 포인터들(쓰기 장벽(Write barrier)을 통해 기억 집합(Remembered set)으로 추적됨)에서 출발하여 살아있는(Live) 객체를 식별합니다 [6, 9, 10].
  • 대피 및 복사(Evacuation): 살아남은 객체들은 From-Space에서 To-Space의 연속적인 메모리 청크로 복사되며, 이 과정을 통해 메모리 단편화(Fragmentation)가 제거됩니다 [5, 6, 11].
  • 승격(Promotion): 두 번의 마이너 GC 사이클을 거치면서도 살아남은 객체는 수명이 긴 객체로 간주되어 구세대(Old Space)로 승격됩니다 [1, 4, 6].
  • 스왑(Swap): 복사가 완료되면 From-Space에 남은 내용은 모두 가비지로 간주되어 완전히 비워지고, 두 스페이스의 역할이 서로 바뀝니다 [6, 9, 12]. 이후 새로운 객체 할당은 비워진 From-Space에서 재개됩니다 [9].

병렬 처리 및 최적화 과거의 마이너 GC는 체니 알고리즘(Cheney's algorithm)에 기반하여 동기식(Synchronous)으로 동작하며 메인 스레드를 멈추게(Stop-the-world) 했습니다 [7, 13]. 하지만 최신 V8 엔진(예: Orinoco 프로젝트)은 병렬 스캐빈저(Parallel Scavenger)를 도입하였습니다 [13, 14]. 이 방식은 메인 스레드와 여러 헬퍼 스레드에 걸쳐 작업을 분산시키며, 각 스레드가 객체를 동시에 식별, 복사, 대피시키고 포인터를 업데이트합니다 [10, 14, 15]. 이러한 병렬화를 통해 가비지 컬렉터가 메인 스레드에서 차지하는 시간을 20%~50%까지 크게 단축하여 애플리케이션의 일시 정지(Pause) 현상을 줄였습니다 [16, 17].

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)


Last updated: 2026-04-19

  • Raw Source: 00_Raw/2026-04-20/마이너 가비지 컬렉션(Minor GC).md