[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,5 +1,5 @@
---
id: P-REINFORCE-AUTO-A11817
id: [[P-Reinforce]]-AUTO-A11817
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
@@ -16,15 +16,15 @@ github_commit: "[P-Reinforce] Continuous Worker - 가비지 컬렉터(Garbage Co
- **가비지 컬렉션의 기본 원리와 객체 탐색**
가비지 컬렉션의 핵심 과제는 메모리의 죽은 영역을 식별하는 것입니다 [1]. GC는 루트 객체에서 시작하여 객체 간의 참조(Pointer)를 추적(Trace)하는 방식을 사용합니다 [3, 7]. V8 엔진의 경우, 힙 내의 데이터와 포인터를 빠르게 식별하기 위해 단어(Word)의 마지막 비트를 플래그로 활용하는 'Tagged pointers(태그된 포인터)' 기법을 사용합니다 [8, 9].
- **세대적 가설에 기반한 가비지 컬렉션 (Generational Garbage Collection)**
대부분의 언어 환경에서는 "대부분의 객체는 생성 직후 빠르게 죽는다"는 세대적 가설(Generational Hypothesis)이 성립합니다 [10, 11]. 이를 활용하여 힙 메모리를 'Young Generation(신규 세대)'과 'Old Generation(구세대)'으로 분리하여 관리합니다 [12, 13].
- **Minor GC (Scavenger):** V8 엔진의 신규 공간(New Space)에서 자주 발생하며 매우 빠르게 실행됩니다 [12, 14, 15]. 신규 공간을 두 개의 반공간(To-Space, From-Space)으로 나누고, 살아있는 객체만 새로운 공간으로 대피(Evacuation)시켜 파편화를 제거하는 알고리즘(Cheney's algorithm 등)을 사용합니다 [14-16]. 이 과정을 두 번 이상 살아남은 객체는 구세대 공간으로 승격(Promote)됩니다 [12, 17].
- **Major GC (Mark-Sweep-Compact):** 구세대 공간에 쌓인 대규모 데이터를 수집할 때 사용됩니다 [18]. 전체 힙에서 살아있는 객체를 깊이 우선 탐색(DFS)으로 탐색하여 표시(Mark)하고, 죽은 객체가 차지한 공간을 청소(Sweep)하여 빈 목록(Free list)으로 반환합니다 [18-21]. 파편화가 심한 페이지의 경우 살아있는 객체를 모아 메모리를 압축(Compact)하기도 합니다 [21, 22].
- **세대적 가설에 기반한 가비지 컬렉션 (Generational [[Garbage Collection]])**
대부분의 언어 환경에서는 "대부분의 객체는 생성 직후 빠르게 죽는다"는 세대적 가설([[Generational Hypothesis]])이 성립합니다 [10, 11]. 이를 활용하여 힙 메모리를 'Young Generation(신규 세대)'과 'Old Generation(구세대)'으로 분리하여 관리합니다 [12, 13].
- **Minor GC ([[Scavenge]]r):** V8 엔진의 신규 공간(New Space)에서 자주 발생하며 매우 빠르게 실행됩니다 [12, 14, 15]. 신규 공간을 두 개의 반공간(To-Space, From-Space)으로 나누고, 살아있는 객체만 새로운 공간으로 대피(Evacuation)시켜 파편화를 제거하는 알고리즘(Cheney's algorithm 등)을 사용합니다 [14-16]. 이 과정을 두 번 이상 살아남은 객체는 구세대 공간으로 승격(Promote)됩니다 [12, 17].
- **[[Major GC]] ([[Mark-Sweep]]-Compact):** 구세대 공간에 쌓인 대규모 데이터를 수집할 때 사용됩니다 [18]. 전체 힙에서 살아있는 객체를 깊이 우선 탐색(DFS)으로 탐색하여 표시(Mark)하고, 죽은 객체가 차지한 공간을 청소(Sweep)하여 빈 목록(Free list)으로 반환합니다 [18-21]. 파편화가 심한 페이지의 경우 살아있는 객체를 모아 메모리를 압축(Compact)하기도 합니다 [21, 22].
- **성능 최적화 및 최신 GC 기법**
가비지 컬렉션 작업은 기본적으로 애플리케이션 실행을 완전히 멈추는 "Stop-the-world" 지연을 유발합니다 [2, 23]. 응답성 저하를 방지하기 위해 V8 엔진(Orinoco GC)이나 IBM JVM 등은 다음과 같은 발전된 기법을 사용합니다.
가비지 컬렉션 작업은 기본적으로 애플리케이션 실행을 완전히 멈추는 "[[Stop-the-world]]" 지연을 유발합니다 [2, 23]. 응답성 저하를 방지하기 위해 V8 엔진([[Orinoco]] GC)이나 IBM JVM 등은 다음과 같은 발전된 기법을 사용합니다.
- **병렬 처리(Parallel):** 메인 스레드와 여러 헬퍼 스레드가 GC 작업을 분담하여 동시에 수행하여 전체 지연 시간을 단축합니다 [24, 25].
- **점진적 처리(Incremental):** 긴 GC 작업을 여러 개의 짧은 단계(Step)로 쪼개어, 메인 스레드에서 JavaScript 실행과 교차(Interleave)로 수행합니다 [24, 26, 27].
- **점진적 처리(Incremental):** 긴 GC 작업을 여러 개의 짧은 단계(Step)로 쪼개어, 메인 스레드에서 [[JavaScript]] 실행과 교차(Interleave)로 수행합니다 [24, 26, 27].
- **동시 처리(Concurrent):** 메인 스레드가 JavaScript를 계속 실행하는 동안, 백그라운드의 헬퍼 스레드가 마킹 및 스위핑 작업을 온전히 수행합니다 [24, 26, 28].
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
@@ -33,8 +33,8 @@ github_commit: "[P-Reinforce] Continuous Worker - 가비지 컬렉터(Garbage Co
## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Generational Hypothesis]], Mark-Sweep-Compact, [[Scavenge]], [[Stop-the-world]]
- **Projects/Contexts:** [[V8 Engine]], Orinoco Garbage Collector, IBM Eclipse OpenJ9
- **Contradictions/Notes:** 소스에 따르면 V8 엔진은 메모리 효율을 높이기 위해 포인터 압축(Pointer compression) 기술을 도입했는데, 이는 메모리와 성능 최적화에는 크게 기여하지만 64비트 시스템 환경에서도 V8의 최대 힙 크기를 4GB로 제한하게 만드는 부작용(Downside)을 초래합니다 [29, 30].
- **Projects/Contexts:** [[V8 Engine]], Orinoco Garbage Collector, IBM E[[CLIP]]se OpenJ9
- **Contradictions/Notes:** 소스에 따르면 V8 엔진은 메모리 효율을 높이기 위해 포인터 압축([[Pointer Compression]]) 기술을 도입했는데, 이는 메모리와 성능 최적화에는 크게 기여하지만 64비트 시스템 환경에서도 V8의 최대 힙 크기를 4GB로 제한하게 만드는 부작용(Downside)을 초래합니다 [29, 30].
---
*Last updated: 2026-04-19*