---
id: [[P-Reinforce]]-AUTO-7BED1F
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 이전 세대(Old Generation_Space)"
---

# [[이전 세대(Old Generation_Space)]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> V8 엔진의 힙(Heap) 메모리 구조에서 '이전 세대(Old Generation 또는 [[Old Space]])'는 신세대(New Space)에서 발생하는 여러 번의 마이너 가비지 컬렉션(스캐빈지)을 거치고 살아남은, 수명이 긴 객체들이 승격(Promote)되어 저장되는 메모리 공간입니다 [1-4]. 이 공간은 데이터의 특성에 따라 포인터가 있는 공간(Old-pointer-space)과 순수 데이터만 있는 공간(Old-data-space)으로 나뉘며, 메이저 가비지 컬렉터([[Major GC]])에 의해 관리됩니다 [4-6].

## 📖 구조화된 지식 (Synthesized Content)
* **이전 세대 메모리의 구조 및 세분화**
  이전 세대는 수백 메가바이트의 데이터를 포함할 수 있는 매우 큰 공간으로, 내부적으로 두 개의 주요 공간으로 나뉩니다 [7].
  * **Old-pointer-space:** 다른 객체를 가리키는 포인터를 포함할 수 있는 대부분의 살아남은 객체들이 보관되는 곳입니다 [4-6].
  * **Old-data-space:** 포인터 없이 순수하게 원시 데이터만 포함하는 객체(예: 문자열, 박스화된 숫자, 언박싱된 더블 배열 등)가 위치합니다 [4-6]. 이 공간에서는 객체가 다른 객체로의 포인터를 가지지 않는다는 것을 GC가 알고 있기 때문에, 마킹(Marking) 시 포인터 추적 단계를 건너뛰어 성능을 최적화할 수 있습니다 [2].

* **메이저 가비지 컬렉션(Major GC)**
  이전 세대는 공간이 크기 때문에 신세대에서 사용하는 스캐빈지([[Scavenge]]) 알고리즘(To-Space와 From-Space를 이용한 복사 방식)을 적용하는 것이 물리적 메모리 오버헤드 측면에서 비실용적입니다 [7, 8]. 따라서 마크-스윕([[Mark-Sweep]])과 마크-컴팩트(Mark-Compact)라는 두 가지 주요 알고리즘을 사용합니다 [7, 9, 10].
  * **Mark (마킹):** 깊이 우선 탐색(DFS) 알고리즘을 사용하여 루트(Root)에서 접근 가능한 활성 객체(Live objects)를 찾아 검은색(Black)으로 표시합니다 [11-13].
  * **Sweep (스윕):** 마킹되지 않은 연속된 데드 객체들을 스캔하여 이를 여유 공간(Free lists)으로 변환함으로써 메모리를 재사용할 수 있게 합니다 [14, 15].
  * **Compact (컴팩트):** 메모리 단편화(Fragmentation)가 심한 페이지의 활성 객체를 다른 페이지의 빈 공간으로 복사(이주)시키고 원래 공간을 해제하여 메모리 효율을 높입니다 [9, 16, 17]. 이동 비용이 높기 때문에 모든 경우에 수행되지는 않고 필요에 따라 선별적으로 공격적인 압축을 수행합니다 [9, 18].

* **최적화: 점진적 마킹 및 지연 스윕([[Incremental Marking]] & Lazy Sweeping)**
  대규모 이전 세대 메모리를 한 번에 수집하려고 하면 수백 밀리초에 달하는 긴 애플리케이션 지연([[Stop-the-world]] pause)이 발생할 수 있습니다 [17, 19]. 이를 방지하기 위해 가비지 컬렉션을 작은 단계로 나누어 메인 스레드의 [[JavaScript]] 실행과 교차 수행하는 '점진적 마킹(Incremental marking)'과, 모든 페이지를 한 번에 스윕하지 않고 메모리가 필요한 시점까지 스윕을 미루는 '지연 스윕(Lazy sweeping)' 기법을 사용합니다 [17, 19-22].

* **쓰기 장벽([[Write Barrier]]s)과 포인터 추적**
  이전 세대의 객체가 신세대(New Space)의 객체를 가리키는 포인터를 가지게 될 경우, 마이너 GC가 이를 인식하지 못해 활성 객체를 지우는 것을 방지하기 위해 '쓰기 장벽(Write barriers)'을 사용합니다 [23-25]. 이 장벽은 구세대에서 신세대로 향하는 포인터(Old-to-new [[Reference]]s)가 기록될 때 이를 스토어 버퍼(Store buffer)에 저장하여, 이후 마이너 GC 시 이전 세대 전체를 스캔하지 않고도 효율적으로 객체를 수집할 수 있게 합니다 [23, 24].

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

## 🔗 지식 연결 (Graph)
- **Related Topics:** New Space (Young Generation), Major GC (Mark-Sweep / Mark-Compact), Write Barriers, [[Generational Hypothesis]]
- **Projects/Contexts:** [[V8 JavaScript Engine]], [[Orinoco]] Garbage Collector
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다. (소스 전반에서 이전 세대 관리에 대한 설명은 일관되며 명시적인 모순점은 존재하지 않습니다.)

---
*Last updated: 2026-04-19*

---
