4.7 KiB
4.7 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-A6562D | 10_Wiki/💡 Topics/Programming & Language | 0.90 |
|
2026-04-20 | [P-Reinforce] Continuous Worker - IBM 가비지 컬렉션 |
IBM 가비지 컬렉션
📌 한 줄 통찰 (The Karpathy Summary)
IBM의 가비지 컬렉션(GC)은 애플리케이션의 메모리 부족을 방지하기 위해 더 이상 필요하지 않은 Java 힙의 객체를 회수하는 자동화된 프로세스입니다 [1]. 전체 GC 과정은 일반적으로 도달 가능한 객체를 식별하는 마크(Mark), 도달할 수 없는 객체를 정리하는 스위프(Sweep), 힙의 단편화를 해결하는 압축(Compact)의 세 단계로 나뉩니다 [1]. GC 작업 중에는 애플리케이션 실행이 일시 중지되는 'stop-the-world (STW)' 현상이 발생할 수 있으며, 시스템은 애플리케이션 중단을 최소화하기 위해 동시(Concurrent) 또는 점진적(Incremental) 처리 기법 및 다양한 정책을 활용합니다 [1-3].
📖 구조화된 지식 (Synthesized Content)
-
가비지 컬렉션 주기 (GC Cycles)
- 글로벌 GC 주기 (Global GC cycle): 전체 Java 힙에서 작동하며 할당 실패나 메모리 임계값 도달과 같은 내부 메커니즘에 의해 암시적으로 트리거되거나,
System.gc()호출 등을 통해 명시적으로 트리거됩니다 [4]. - 부분 GC 주기 (Partial GC cycle): 힙의 특정 부분에서만 작동하며, 선택된 GC 정책에 따라 암시적으로만 발생합니다 [4, 5].
- 글로벌 GC 주기 (Global GC cycle): 전체 Java 힙에서 작동하며 할당 실패나 메모리 임계값 도달과 같은 내부 메커니즘에 의해 암시적으로 트리거되거나,
-
주요 GC 작업 (GC Operations)
- 마크 작업 (Mark): 루트 객체에서 시작하여 힙 내 도달 가능한 객체를 추적하고 식별합니다 [6, 7]. 비트 배열인 '마크 맵(Mark map)'을 사용해 객체 위치를 기록하며, 초기(Initial), 메인(Main), 최종(Final) 세 단계로 진행됩니다 [6, 7]. 성능 향상을 위해 보조 스레드를 통한 병렬 처리나 애플리케이션 스레드와 함께 작동하는 동시 마크(Concurrent mark) 처리를 수행할 수 있습니다 [2, 8].
- 스위프 작업 (Sweep): 여유 메모리를 분석하고 해당 공간을 중앙 기록인 프리리스트(Freelist)에 연결하여 새로운 객체 할당이 가능하도록 메모리를 회수합니다 [9].
- 스캐빈지 작업 (Scavenge): 'Nursery' 영역의 할당 실패 시 트리거되며 도달 가능한 객체를 새 공간이나 'Tenure' 영역으로 복사하여 유지합니다(
gencon정책에서 주로 사용) [10, 11]. - 복사 전달 작업 (Copy Forward): 힙의 단편화된 영역을 비우기 위해 라이브 객체를 새로운 영역으로 이동시킵니다(
balanced정책에서 주로 사용) [11, 12]. - 압축 작업 (Compact): 메모리 단편화를 제거하기 위해 객체를 이동시킵니다. 객체의 모든 참조를 업데이트해야 하는 비용이 매우 큰 작업이므로 기본적으로는 실행되지 않고 여유 공간이 극도로 부족하거나 특정 조건(-Xcompactgc 옵션 등)이 충족될 때만 발생합니다 [13, 14].
-
약한 참조 처리 (Weak Reference Processing)
- GC 주기 동안 소프트(Soft), 약한(Weak), 팬텀(Phantom) 참조를 처리하여 특정 참조가 유지되거나 삭제되도록 관리합니다 [14]. 소프트 참조는 메모리 부족 오류가 발생할 가능성이 있을 때만 지워지며, 약한 참조와 팬텀 참조는 참조 객체가 마크되지 않을 때 즉시 혹은 자동으로 지워집니다 [15].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: GC Policies (gencon, optavgpause, balanced), Stop-the-world (STW) Pause, Mark, Sweep, and Compact Operations
- Projects/Contexts: Eclipse OpenJ9™, Java Object Heap
- Contradictions/Notes: 애플리케이션 성능 최적화를 위해 동시 마크(Concurrent mark) 방식을 사용하면 STW 일시 중지 시간은 줄일 수 있지만, 쓰기 장벽(Write barrier) 작동으로 인한 추가 CPU 소비와 힙 락 할당 중 객체 추적에 따른 부하가 발생하는 트레이드오프(단점)가 존재합니다 [3]. 또한, 개발자가
System.gc()를 직접 호출하거나 finalizer를 이용해 GC를 통제하려 하면 오히려 애플리케이션 성능을 크게 저하시킬 수 있습니다 [5].
Last updated: 2026-04-19
- Raw Source: 00_Raw/2026-04-20/IBM 가비지 컬렉션.md