Files

4.0 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-E7007A 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [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)


Last updated: 2026-04-19

  • Raw Source: 00_Raw/2026-04-20/Scavenge.md