[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,22 +1,22 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-EED588
|
||||
id: [[P-Reinforce]]-AUTO-EED588
|
||||
category: "10_Wiki/💡 Topics/Programming & Language"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 점진적 마킹(Incremental marking)"
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 점진적 마킹([[Incremental Marking]])"
|
||||
---
|
||||
|
||||
# [[점진적 마킹(Incremental marking)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 점진적 마킹(Incremental marking)은 가비지 컬렉션(GC) 과정에서 발생하는 긴 중단 시간(Stop-the-world)을 줄이기 위해 전체 마킹 작업을 여러 개의 작은 일시 정지 구간으로 나누어 실행하는 기법입니다 [1-3]. 애플리케이션의 메인 스레드 실행과 마킹 작업이 교차로 진행되므로 힙 탐색 중에도 사용자 입력 처리나 애니메이션 렌더링을 계속할 수 있습니다 [2, 4]. 비록 가비지 컬렉션에 소비되는 총시간을 줄여주지는 못하지만, 작업 시간을 분산시킴으로써 애플리케이션의 지연 시간(Latency)과 반응성을 크게 개선합니다 [2].
|
||||
> 점진적 마킹(Incremental marking)은 가비지 컬렉션(GC) 과정에서 발생하는 긴 중단 시간([[Stop-the-world]])을 줄이기 위해 전체 마킹 작업을 여러 개의 작은 일시 정지 구간으로 나누어 실행하는 기법입니다 [1-3]. 애플리케이션의 메인 스레드 실행과 마킹 작업이 교차로 진행되므로 힙 탐색 중에도 사용자 입력 처리나 애니메이션 렌더링을 계속할 수 있습니다 [2, 4]. 비록 가비지 컬렉션에 소비되는 총시간을 줄여주지는 못하지만, 작업 시간을 분산시킴으로써 애플리케이션의 지연 시간(Latency)과 반응성을 크게 개선합니다 [2].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **작동 메커니즘 및 활성화 조건:**
|
||||
점진적 마킹은 힙 크기가 특정 임계값에 도달하면 활성화되며, 이후 일정량의 메모리가 할당될 때마다 실행이 잠시 중단되고 점진적 마킹 '단계(step)'가 수행됩니다 [1, 3]. V8 엔진에서는 모바일 기기 기준으로 각 일시 정지 시간이 5~10ms 수준으로 매우 짧게 유지됩니다 [1, 3]. 기본적으로 깊이 우선 탐색(Depth-First-Search) 알고리즘을 사용하며, 객체의 상태를 식별하기 위해 흰색(미발견), 회색(발견되었으나 이웃 미처리), 검은색(완전 처리됨)의 3색 분류 시스템을 사용합니다 [1].
|
||||
점진적 마킹은 힙 크기가 특정 임계값에 도달하면 활성화되며, 이후 일정량의 메모리가 할당될 때마다 실행이 잠시 중단되고 점진적 마킹 '단계(step)'가 수행됩니다 [1, 3]. V8 엔진에서는 모바일 기기 기준으로 각 일시 정지 시간이 5~10ms 수준으로 매우 짧게 유지됩니다 [1, 3]. 기본적으로 깊이 우선 탐색(Depth-First-[[Search]]) 알고리즘을 사용하며, 객체의 상태를 식별하기 위해 흰색(미발견), 회색(발견되었으나 이웃 미처리), 검은색(완전 처리됨)의 3색 분류 시스템을 사용합니다 [1].
|
||||
|
||||
* **객체 그래프 변경과 쓰기 장벽(Write Barriers)의 역할:**
|
||||
* **객체 그래프 변경과 쓰기 장벽([[Write Barrier]]s)의 역할:**
|
||||
점진적 마킹의 가장 큰 특징이자 과제는 마킹이 진행되는 동안 자바스크립트가 실행되어 힙 메모리의 객체 그래프가 지속적으로 변경될 수 있다는 점입니다 [2, 5]. 만약 가비지 컬렉터가 이미 탐색을 마친 '검은색' 객체에서 아직 탐색되지 않은 '흰색' 객체로 새로운 참조가 생성된다면, 살아있는 흰색 객체가 가비지로 잘못 분류될 위험이 있습니다 [5]. V8 엔진은 이를 해결하기 위해 쓰기 장벽(Write barrier)을 활용합니다 [5]. 쓰기 장벽은 검은색 객체에서 흰색 객체로의 포인터 생성을 감지하며, 해당 포인터가 감지되면 검은색 객체를 다시 회색으로 변경하고 마킹 데크(Deque)로 되돌려 보내 흰색 객체가 정상적으로 발견되도록 순서를 보존합니다 [5].
|
||||
|
||||
* **다른 엔진에서의 구현 (IBM OpenJ9):**
|
||||
@@ -30,8 +30,8 @@ github_commit: "[P-Reinforce] Continuous Worker - 점진적 마킹(Incremental m
|
||||
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** 가비지 컬렉션(Garbage Collection), 쓰기 장벽(Write barriers), 지연 스위핑(Lazy sweeping)
|
||||
- **Projects/Contexts:** [[V8 JavaScript Engine]], Orinoco Garbage Collector, IBM OpenJ9 (Balanced GC)
|
||||
- **Related Topics:** 가비지 컬렉션([[Garbage Collection]]), 쓰기 장벽(Write barriers), 지연 스위핑(Lazy sweeping)
|
||||
- **Projects/Contexts:** [[V8 [[JavaScript]] Engine]], [[Orinoco]] Garbage Collector, IBM OpenJ9 (Balanced GC)
|
||||
- **Contradictions/Notes:** 점진적 마킹은 메인 스레드의 긴 일시 정지를 방지하고 응답성을 높이는 데에는 훌륭한 기법이지만, 메인 스레드에서 가비지 컬렉션에 소모되는 전체 시간을 줄여주지는 않으며 오히려 미세하게 증가시키는 경향이 있습니다 [2].
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user