4. C# 가비지 컬렉션: 세대별 GC, LOH, GC 압박 줄이기

난이도 상 해설 보기 →
문제

문제 4 — C# 가비지 컬렉션: 세대별 GC, LOH, GC 압박 줄이기

면접 질문

  1. .NET의 세대별(generational) GC가 무엇이며 왜 세대를 나누는지 설명해보세요. Gen 0/1/2는 각각 어떤 객체를 담고, 수집 빈도와 비용은 어떻게 다른가요?

  2. LOH(Large Object Heap)란 무엇이고, 어떤 객체가 LOH로 가나요? (임계 크기 포함) LOH가 일반 힙(SOH)과 다르게 동작하는 점은 무엇인가요?

  3. "박싱(boxing)"이 무엇이며 왜 GC 압박을 유발하는지, 그리고 의도치 않게 박싱이 발생하는 대표적 상황을 예로 들어보세요.

응용 시나리오

C#으로 작성된 실시간 게임 서버가 평소엔 잘 돌다가, 전투가 격해지는 구간에서 주기적으로 수십~수백 ms의 "프리즈(stop-the-world)"가 발생합니다. 프로파일러로 보니 Gen 2 GC와 LOH 관련 수집이 잦고, Gen 0 할당률(allocation rate)이 매우 높습니다.

  • 이 프리즈의 원인을 세대별 GC와 LOH 관점에서 설명해보세요.
  • 다음과 같은 코드 습관들이 GC 압박에 어떻게 기여하는지, 그리고 어떻게 개선할지 구체적으로 제안하세요: (1) 매 틱 new 임시 객체/리스트 생성, (2) string 연결로 로그/패킷 조립, (3) object 컬렉션·Dictionary에 값 타입 넣기, (4) LINQ 람다 남발, (5) 큰 배열을 매번 새로 할당.
  • 게임 서버에서 GC 멈춤을 줄이기 위한 설계/구성(서버 GC, 풀링, struct, Span 등) 전략을 종합해보세요.

(C# 대신 C++ 환경을 가정한다면, RAII와 커스텀 allocator로 같은 목표(결정적 수명·할당 비용 제거)를 어떻게 달성하는지 답해도 됩니다.)

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.