4.5 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-5617F2 | 10_Wiki/💡 Topics/Programming & Language | 0.90 |
|
2026-04-20 | [P-Reinforce] Continuous Worker - 마크-컴팩트(Mark-Compact) |
마크-컴팩트(Mark-Compact)
📌 한 줄 통찰 (The Karpathy Summary)
지식 요약 정보 추출 중...
📖 구조화된 지식 (Synthesized Content)
-
작동 원리 (마킹 및 컴팩팅 단계): 마크-컴팩트 알고리즘은 마크-스윕(Mark-Sweep)과 매우 밀접하게 관련되어 있으며, 마킹(Marking)과 컴팩팅(Compacting)이라는 두 가지 주요 단계로 작동합니다 [2]. 마킹 단계에서는 루트(root)로부터 도달할 수 있는 힙 내의 모든 라이브 객체를 깊이 우선 탐색(DFS) 방식으로 추적하며 발견된 객체들을 회색(grey)이나 흑색(black) 상태로 마킹합니다 [3, 8-10]. 마킹 알고리즘이 종료되면 모든 라이브 객체는 흑색으로, 죽은(dead) 객체는 백색(white)으로 남게 되며 이 정보가 컴팩팅 단계에서 활용됩니다 [11].
-
컴팩팅 프로세스 (단편화 해소): 컴팩팅 단계는 힙 메모리가 심하게 단편화되어 있을 때 실행되며, 수많은 작은 빈 공간을 포함하고 있는 단편화된 페이지의 객체들을 다른 페이지의 빈 공간(Free list)으로 이주시킴으로써 실제 메모리 사용량을 줄이려 시도합니다 [4-6]. 각 라이브 객체는 새로 할당된 공간으로 복사되며, 원래 객체의 첫 번째 단어에는 새로운 위치를 가리키는 포워딩 주소(forwarding address)가 남겨집니다 [4]. 만약 기존 페이지가 모두 비워지면(evacuated) 운영 체제(OS)에 다시 반환될 수 있으며, 필요에 따라 새로운 페이지가 할당되기도 합니다 [4, 6].
-
포인터 업데이트와 성능 비용: 객체가 메모리 내에서 이동함에 따라, 해당 객체들을 가리키고 있던 다른 객체들의 모든 참조(reference) 또한 새로운 주소로 변경되어야 합니다 [4, 7]. V8 엔진의 경우, 대피(evacuation)가 진행되는 동안 포인터의 위치들이 기록되며, 대피가 완료된 후 리스트를 순회하며 복사된 새로운 위치를 가리키도록 포인터를 업데이트합니다 [4]. 이러한 대규모 이동 및 참조 수정 작업으로 인해 힙을 컴팩팅하는 과정은 **비용이 매우 많이 드는 오퍼레이션(expensive operation)**으로 간주됩니다 [7]. 만약 특정 페이지를 가리키는 외부 포인터가 너무 많은 '인기 있는(popular)' 페이지라면, 기록을 중단하고 다음 GC 사이클 때까지 대피를 연기하기도 합니다 [4].
-
트리거(Trigger) 조건: 수백 메가바이트의 데이터를 포함할 수 있는 Old Space를 수집하기 위해 실행되지만 [2, 3], 항상 수행되는 것은 아닙니다. 예를 들어 IBM GC 정책의 경우, 기본적으로 컴팩트 작업을 피하지만
-Xcompactgc커맨드 라인 옵션을 강제 지정했을 때, 스윕(sweep) 후에도 할당 요청을 충족할 여유 공간이 부족할 때, 명시적System.gc()호출 시 특정 조건을 만족할 때 등의 상황에서 발생합니다 [7, 12].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: 가비지 컬렉션(Garbage Collection), 마크-스윕(Mark-Sweep), 단편화(Fragmentation)
- Projects/Contexts: V8 JavaScript Engine, IBM SDK/Eclipse OpenJ9
- Contradictions/Notes: 소스 상에서 마크-컴팩트 알고리즘의 개념에 대한 모순은 없습니다. 다만 V8(자바스크립트)에서는 주로 'Old Space'를 정리하기 위해 설계된 메이저 가비지 컬렉션의 핵심 메커니즘으로 소개되며 [1, 2], IBM OpenJ9(자바) 환경에서는 고비용 오퍼레이션이라는 이유로 기본적으로는 발생하지 않되, 공간 고갈이나 명시적 옵션 적용 시 발생하는 조건부 동작으로 자세히 묘사됩니다 [7, 12].
Last updated: 2026-04-19
- Raw Source: 00_Raw/2026-04-20/마크-컴팩트(Mark-Compact).md