Files
2nd/01_Archive/2026-04-20/이전 세대(Old Generation_Space).md
T

5.0 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-7BED1F 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [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 Barriers)과 포인터 추적 이전 세대의 객체가 신세대(New Space)의 객체를 가리키는 포인터를 가지게 될 경우, 마이너 GC가 이를 인식하지 못해 활성 객체를 지우는 것을 방지하기 위해 '쓰기 장벽(Write barriers)'을 사용합니다 [23-25]. 이 장벽은 구세대에서 신세대로 향하는 포인터(Old-to-new references)가 기록될 때 이를 스토어 버퍼(Store buffer)에 저장하여, 이후 마이너 GC 시 이전 세대 전체를 스캔하지 않고도 효율적으로 객체를 수집할 수 있게 합니다 [23, 24].

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

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

🔗 지식 연결 (Graph)


Last updated: 2026-04-19