--- id: [[P-Reinforce|P-Reinforce]]-AUTO-A6562D category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - IBM κ°€λΉ„μ§€ μ»¬λ ‰μ…˜" --- # [[IBM α„€α…‘α„‡α…΅α„Œα…΅ ᄏα…₯ᆯ렉션|IBM κ°€λΉ„μ§€ μ»¬λ ‰μ…˜]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > IBM의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ 뢀쑱을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ Java νž™μ˜ 객체λ₯Ό νšŒμˆ˜ν•˜λŠ” μžλ™ν™”λœ ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€ [1]. 전체 GC 과정은 일반적으둜 도달 κ°€λŠ₯ν•œ 객체λ₯Ό μ‹λ³„ν•˜λŠ” 마크(Mark), 도달할 수 μ—†λŠ” 객체λ₯Ό μ •λ¦¬ν•˜λŠ” μŠ€μœ„ν”„(Sweep), νž™μ˜ λ‹¨νŽΈν™”λ₯Ό ν•΄κ²°ν•˜λŠ” μ••μΆ•(Compact)의 μ„Έ λ‹¨κ³„λ‘œ λ‚˜λ‰©λ‹ˆλ‹€ [1]. GC μž‘μ—… μ€‘μ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행이 μΌμ‹œ μ€‘μ§€λ˜λŠ” '[[Stop-the-world|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 μž‘μ—… (GC [[Opera|Opera]]tions)** - **마크 μž‘μ—… (Mark):** 루트 κ°μ²΄μ—μ„œ μ‹œμž‘ν•˜μ—¬ νž™ λ‚΄ 도달 κ°€λŠ₯ν•œ 객체λ₯Ό μΆ”μ ν•˜κ³  μ‹λ³„ν•©λ‹ˆλ‹€ [6, 7]. λΉ„νŠΈ 배열인 '마크 λ§΅(Mark map)'을 μ‚¬μš©ν•΄ 객체 μœ„μΉ˜λ₯Ό κΈ°λ‘ν•˜λ©°, 초기(Initial), 메인(Main), μ΅œμ’…(Final) μ„Έ λ‹¨κ³„λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€ [6, 7]. μ„±λŠ₯ ν–₯상을 μœ„ν•΄ 보쑰 μŠ€λ ˆλ“œλ₯Ό ν†΅ν•œ 병렬 μ²˜λ¦¬λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μŠ€λ ˆλ“œμ™€ ν•¨κ»˜ μž‘λ™ν•˜λŠ” λ™μ‹œ 마크(Concurrent mark) 처리λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 8]. - **μŠ€μœ„ν”„ μž‘μ—… (Sweep):** μ—¬μœ  λ©”λͺ¨λ¦¬λ₯Ό λΆ„μ„ν•˜κ³  ν•΄λ‹Ή 곡간을 쀑앙 기둝인 ν”„λ¦¬λ¦¬μŠ€νŠΈ(Freelist)에 μ—°κ²°ν•˜μ—¬ μƒˆλ‘œμš΄ 객체 할당이 κ°€λŠ₯ν•˜λ„λ‘ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•©λ‹ˆλ‹€ [9]. - **μŠ€μΊλΉˆμ§€ μž‘μ—… ([[Scavenge|Scavenge]]):** 'Nursery' μ˜μ—­μ˜ ν• λ‹Ή μ‹€νŒ¨ μ‹œ 트리거되며 도달 κ°€λŠ₯ν•œ 객체λ₯Ό μƒˆ κ³΅κ°„μ΄λ‚˜ 'Tenure' μ˜μ—­μœΌλ‘œ λ³΅μ‚¬ν•˜μ—¬ μœ μ§€ν•©λ‹ˆλ‹€(`gencon` μ •μ±…μ—μ„œ 주둜 μ‚¬μš©) [10, 11]. - **볡사 전달 μž‘μ—… (Copy Forward):** νž™μ˜ λ‹¨νŽΈν™”λœ μ˜μ—­μ„ λΉ„μš°κΈ° μœ„ν•΄ 라이브 객체λ₯Ό μƒˆλ‘œμš΄ μ˜μ—­μœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€(`balanced` μ •μ±…μ—μ„œ 주둜 μ‚¬μš©) [11, 12]. - **μ••μΆ• μž‘μ—… (Compact):** λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”λ₯Ό μ œκ±°ν•˜κΈ° μœ„ν•΄ 객체λ₯Ό μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. 객체의 λͺ¨λ“  μ°Έμ‘°λ₯Ό μ—…λ°μ΄νŠΈν•΄μ•Ό ν•˜λŠ” λΉ„μš©μ΄ 맀우 큰 μž‘μ—…μ΄λ―€λ‘œ κΈ°λ³Έμ μœΌλ‘œλŠ” μ‹€ν–‰λ˜μ§€ μ•Šκ³  μ—¬μœ  곡간이 κ·Ήλ„λ‘œ λΆ€μ‘±ν•˜κ±°λ‚˜ νŠΉμ • 쑰건(-Xcompactgc μ˜΅μ…˜ λ“±)이 좩쑱될 λ•Œλ§Œ λ°œμƒν•©λ‹ˆλ‹€ [13, 14]. - **μ•½ν•œ μ°Έμ‘° 처리 (Weak [[Reference|Reference]] [[Processing|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:** E[[CLIP|CLIP]]se OpenJ9β„’, Java Object Heap - **Contradictions/Notes:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ λ™μ‹œ 마크(Concurrent mark) 방식을 μ‚¬μš©ν•˜λ©΄ STW μΌμ‹œ 쀑지 μ‹œκ°„μ€ 쀄일 수 μžˆμ§€λ§Œ, μ“°κΈ° μž₯λ²½([[Write Barrier|Write Barrier]]) μž‘λ™μœΌλ‘œ μΈν•œ μΆ”κ°€ CPU μ†ŒλΉ„μ™€ νž™ 락 ν• λ‹Ή 쀑 객체 좔적에 λ”°λ₯Έ λΆ€ν•˜κ°€ λ°œμƒν•˜λŠ” νŠΈλ ˆμ΄λ“œμ˜€ν”„(단점)κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€ [3]. λ˜ν•œ, κ°œλ°œμžκ°€ `System.gc()`λ₯Ό 직접 ν˜ΈμΆœν•˜κ±°λ‚˜ finalizerλ₯Ό μ΄μš©ν•΄ GCλ₯Ό ν†΅μ œν•˜λ € ν•˜λ©΄ 였히렀 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯을 크게 μ €ν•˜μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [5]. --- *Last updated: 2026-04-19* ---