---
id: P-REINFORCE-AUTO-E7007A
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - Scavenge"
---

# [[Scavenge]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> Scavenge(스캐빈지)는 V8 엔진을 비롯한 가비지 컬렉션(GC) 시스템에서 젊은 세대(Young Generation) 메모리를 정리하기 위해 수행되는 마이너 가비지 컬렉션(Minor GC) 주기입니다 [1, 2]. 주로 새로운 객체가 할당되는 '새로운 공간(New-space)'이 가득 차서 할당에 실패했을 때 트리거되며, 죽은 객체를 빠르게 제거하고 살아있는 객체를 보존합니다 [1, 2]. 애플리케이션 실행 중 매우 빈번하게 발생하기 때문에 성능에 미치는 영향을 최소화하도록 극히 빠른 속도로 동작하게 설계되었습니다 [3].

## 📖 구조화된 지식 (Synthesized Content)
- **동작 원리 (V8 엔진 및 Cheney의 알고리즘):** V8의 새 공간(New-space)은 크기가 같은 두 개의 반공간(Semi-space)인 To-space와 From-space로 나뉩니다 [3]. 객체 할당 포인터가 새 공간의 끝에 도달하여 메모리가 고갈되면 스캐빈지가 트리거됩니다 [1, 2]. 이때 To-space와 From-space의 역할을 맞바꾼 뒤, From-space를 스캔하여 살아있는 객체들을 찾아 To-space의 한쪽 끝으로 복사(대피)하며, 이 과정을 통해 메모리 파편화(Fragmentation)가 완전히 제거됩니다 [3, 4].
- **객체의 승격 (Promotion):** 두 번의 스캐빈지(마이너 GC) 주기 동안 살아남은 객체는 수명이 긴 객체로 간주되어 새 공간에서 '오래된 공간(Old-space)'으로 승격(Promoted)됩니다 [1, 4].
- **병렬 및 스레드 처리 (Orinoco 가비지 컬렉터):** 전통적으로 스캐빈지는 애플리케이션 실행을 멈추는 'Stop-the-world' 방식이었지만, V8의 Orinoco 프로젝트에서는 병렬 스캐빈저(Parallel Scavenger)를 도입했습니다 [5-7]. 메인 스레드와 여러 헬퍼 스레드에 작업을 분산하여 루트 스캔, 객체 복사, 오래된 공간으로의 승격, 포인터 업데이트를 병렬적으로 끼워 넣어(Interleaved) 실행합니다 [6, 8, 9]. 이를 통해 메인 스레드의 대기 시간(Pause time)을 약 20%~50%까지 대폭 단축했습니다 [10, 11].
- **IBM J9 / Eclipse OpenJ9 환경의 스캐빈지:** IBM GC 정책(주로 gencon 정책)에서도 널서리(Nursery) 영역에서의 할당 실패 시 스캐빈지 작업이 실행됩니다 [12]. 이 작업은 루트 객체를 식별하는 루트 스캔(Initial), 도달 가능한 객체를 널서리의 생존자(Survivor) 공간이나 텐뉴어(Tenure) 공간으로 이동시키는 계층적 스캔(Main), 그리고 약한 참조 등을 처리하는 단계(Final)로 구성됩니다 [12].

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Garbage Collection]], [[New-space (Young Generation)]], [[Old-space (Old Generation)]], [[Cheney's Algorithm]], [[Mark-Sweep-Compact]]
- **Projects/Contexts:** [[V8 JavaScript Engine]], [[Orinoco GC]], [[Eclipse OpenJ9]]
- **Contradictions/Notes:** 소스 간의 뚜렷한 모순은 없으나, 스캐빈지가 발생하면 본래 메인 스레드가 정지하는 'Stop-the-world' 현상이 발생하지만 최신 V8 엔진(Orinoco)에서는 다수의 스레드를 동원한 병렬 처리(Parallel)를 적용하여 사용자가 느끼는 지연(Jank)을 획기적으로 줄였다고 명시하고 있습니다 [6, 10, 13].

---
*Last updated: 2026-04-19*
- Raw Source: [[00_Raw/2026-04-20/Scavenge.md]]
---
