[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-04-30 22:42:02 +09:00
parent 0bd4f19e38
commit c36c0644a1
4888 changed files with 18470 additions and 18602 deletions
@@ -1,22 +1,22 @@
---
id: P-REINFORCE-AUTO-0C14B5
id: [[P-Reinforce]]-AUTO-0C14B5
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - V8 Heap Architecture"
github_commit: "[P-Reinforce] Continuous Worker - V8 Heap [[Architecture]]"
---
# [[V8 Heap Architecture]]
## 📌 한 줄 통찰 (The Karpathy Summary)
> V8 엔진의 힙(Heap) 아키텍처는 자바스크립트 런타임에 동적으로 할당되는 데이터와 객체를 저장하기 위해 구조화된 메모리 영역이다 [1]. V8은 메모리 할당 속도를 높이고 가비지 컬렉션(GC)의 오버헤드를 줄이기 위해, 객체의 수명 주기에 기반한 '세대별 가설(Generational Hypothesis)'을 적용하여 힙을 여러 특수 공간(Space)으로 분할한다 [2, 3]. 이를 통해 각기 다른 메모리 영역의 특성에 맞는 최적화된 메모리 회수 알고리즘을 적용할 수 있다 [2].
> V8 엔진의 힙(Heap) 아키텍처는 자바스크립트 런타임에 동적으로 할당되는 데이터와 객체를 저장하기 위해 구조화된 메모리 영역이다 [1]. V8은 메모리 할당 속도를 높이고 가비지 컬렉션(GC)의 오버헤드를 줄이기 위해, 객체의 수명 주기에 기반한 '세대별 가설([[Generational Hypothesis]])'을 적용하여 힙을 여러 특수 공간(Space)으로 분할한다 [2, 3]. 이를 통해 각기 다른 메모리 영역의 특성에 맞는 최적화된 메모리 회수 알고리즘을 적용할 수 있다 [2].
## 📖 구조화된 지식 (Synthesized Content)
**힙의 주요 공간(Spaces)**
V8의 힙은 객체의 특성과 수명에 따라 여러 개의 고유한 공간으로 나뉘어 관리된다.
* **New Space (Young Generation)**: 대부분의 새로운 객체가 최초로 할당되는 공간으로, 1MB에서 8MB(또는 64MB) 사이의 작은 크기로 유지된다 [4-6]. 이 공간은 가비지 컬렉션을 매우 빠르게 수행하도록 설계되었으며, 내부적으로 'To-Space'와 'From-Space'라는 두 개의 동일한 반공간(semi-space)으로 나뉜다 [6, 7]. 이 영역은 Scavenger라 불리는 Minor GC 알고리즘(Cheney's algorithm 기반)에 의해 관리되며, 여기서 두 번의 GC 주기를 살아남은 객체는 Old Space로 이동(승격, Promotion)된다 [5-7].
* **Old Space (Old Generation)**: New Space에서 살아남은 수명이 긴 객체들이 저장되는 공간으로 훨씬 더 큰 크기를 갖는다 [4, 5, 8]. 가비지 컬렉터의 마킹 속도를 최적화하기 위해, 다른 객체에 대한 포인터를 포함하는 **Old-pointer-space**와 문자열이나 박싱된 숫자처럼 원시 데이터만 포함하여 포인터 추적이 필요 없는 **Old-data-space**로 세분화된다 [2, 4, 8]. 이 공간은 Mark-Sweep-Compact 방식의 Major GC에 의해 관리된다 [9].
* **New Space (Young Generation)**: 대부분의 새로운 객체가 최초로 할당되는 공간으로, 1MB에서 8MB(또는 64MB) 사이의 작은 크기로 유지된다 [4-6]. 이 공간은 가비지 컬렉션을 매우 빠르게 수행하도록 설계되었으며, 내부적으로 'To-Space'와 'From-Space'라는 두 개의 동일한 반공간(semi-space)으로 나뉜다 [6, 7]. 이 영역은 [[Scavenge]]r라 불리는 Minor GC 알고리즘(Cheney's algorithm 기반)에 의해 관리되며, 여기서 두 번의 GC 주기를 살아남은 객체는 [[Old Space]]로 이동(승격, Promotion)된다 [5-7].
* **Old Space (Old Generation)**: New Space에서 살아남은 수명이 긴 객체들이 저장되는 공간으로 훨씬 더 큰 크기를 갖는다 [4, 5, 8]. 가비지 컬렉터의 마킹 속도를 최적화하기 위해, 다른 객체에 대한 포인터를 포함하는 **Old-pointer-space**와 문자열이나 박싱된 숫자처럼 원시 데이터만 포함하여 포인터 추적이 필요 없는 **Old-data-space**로 세분화된다 [2, 4, 8]. 이 공간은 [[Mark-Sweep]]-Compact 방식의 [[Major GC]]에 의해 관리된다 [9].
* **Large Object Space**: 다른 공간의 크기 제한(일반적으로 1MB)을 초과하는 거대한 객체들이 저장된다 [2, 4]. 각 객체는 운영체제로부터 `mmap`을 통해 직접 할당받은 전용 메모리 영역을 가지며, 가비지 컬렉터에 의해 결코 메모리 위치가 이동되지 않는다 [2, 4].
* **Code Space**: JIT(Just-In-Time) 컴파일러가 생성한 실행 가능한 기계어 코드(Code objects)가 할당되는 곳이다 [2, 4]. 힙 내에서 유일하게 실행 권한(Executable)이 부여된 메모리 공간이다 [2, 4].
* **특수 및 불변 공간**: 모든 객체의 크기가 동일하여 수집을 단순화할 수 있는 **Cell-space**, **Property-cell-space**, **Map-space**가 있으며 [4, 10], 변하지 않고 이동하지 않는 불변 객체를 저장하는 **Read Only Space**도 존재한다 [11].
@@ -27,8 +27,8 @@ V8의 힙은 객체의 특성과 수명에 따라 여러 개의 고유한 공간
* 각 페이지에는 메모리 객체 외에도 다양한 플래그와 메타데이터가 담긴 헤더(Header), 라이브 객체를 나타내는 마킹 비트맵(Marking bitmap)이 포함된다 [3, 12].
* 또한 별도의 메모리에 할당된 슬롯 버퍼(Slots buffer)를 가져, 해당 페이지에 있는 객체를 가리키는 다른 객체들의 포인터 목록인 '기억 집합(Remembered set)'을 형성한다 [3, 12].
**포인터 압축과 메모리 케이지(V8 Memory Cage)**
보안 및 성능 최적화를 위해 V8은 64비트 플랫폼에서 '포인터 압축(Pointer Compression)' 기술을 사용한다 [15, 16].
**포인터 압축과 메모리 케이지(V8 [[memory]] Cage)**
보안 및 성능 최적화를 위해 V8은 64비트 플랫폼에서 '포인터 압축([[Pointer Compression]])' 기술을 사용한다 [15, 16].
* 객체의 참조를 64비트 전체 주소 대신, 기준 주소(Base address)로부터의 32비트 오프셋(Offset)으로 저장하여 객체 포인터의 메모리 오버헤드를 절반으로 줄인다 [16].
* 이 방식은 구조적으로 모든 V8 힙 객체가 4GB 크기의 연속된 메모리 영역인 "케이지(Cage)" 내부에 갇혀 있도록 강제한다 [16, 17]. 따라서 전체 시스템의 메모리가 아무리 많아도, 단일 V8 인스턴스의 관리되는 힙 크기는 4GB를 초과할 수 없다 [17, 18].