23. GC 일시정지(pause)의 내부 메커니즘과 저지연 튜닝
문제 23 — GC 일시정지(pause)의 내부 메커니즘과 저지연 튜닝
실시간 게임 서버(C#/.NET, JVM 등 관리 언어 런타임)에서 가비지 컬렉션의 일시정지(GC pause) 는 틱 지터·응답 꼬리 지연의 주요 원인이다. 다음을 설명하라.
-
stop-the-world 가 왜 필요한가: 마킹/이동(compaction) 단계에서 힙을 안전하게 훑고 객체를 옮기려면 무엇을 멈춰야 하며, "safepoint" 는 무엇인가.
-
동시/증분 GC 의 핵심 장치: 애플리케이션 스레드(뮤테이터)가 도는 동안 GC 가 마킹을 진행하려면 뮤테이터의 참조 변경을 GC 에 알려야 한다. write barrier 와 card table(및 세대 간 참조 추적)이 무엇이고 왜 필요한지, tri-color(삼색) 마킹의 불변식이 어떻게 유지되는지 설명하라.
-
세대별 GC 와 일시정지 규모: gen0/gen1 수집이 짧고 gen2(full)·LOH 수집이 긴 이유를 할당률·생존율·이동 비용으로 설명하라. .NET 의 Workstation vs Server GC, Background/Concurrent GC 가 일시정지에 미치는 영향은?
-
저지연 실무 튜닝: 게임 서버에서 GC 일시정지를 줄이는 실전 기법들(할당률 억제, 오브젝트 풀·
struct/Span<T>·스택 할당, LOH 회피, 사전 워밍,GCSettings.LatencyMode/TryStartNoGCRegion, 서버 GC·힙 수 조정)을 트레이드오프와 함께 논하라. "GC 언어는 실시간 서버에 부적합한가?"에 답하라.
(모범답안은 answer.md 참고.)
직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.