CS/C#_C++

C# GC(Garbage Collection)

tae-woong 2025. 10. 2. 22:09

 

GC란 무엇인가?

GC(Garbage Collection, 가비지 컬렉션)는 자동 메모리 관리 기법으로, 프로그램이 동적으로 할당했던 메모리 중 더 이상 필요하지 않은 영역을 찾아 해제한다. C의 free()나 C++의 delete처럼 개발자가 직접 메모리를 관리하지 않아도 되며, Java, C#, Python 등에서 주로 사용된다.

  • 가비지(Garbage) : 힙 영역에 생성된 객체 중 어디서도 참조하지 않아 접근 불가능한 객체.

GC의 기본 동작 방식 : Mark and Sweep
  1. Mark 단계
    • 루트 집합(Root Set: 스택 변수, 전역 변수 등)에서 시작해 참조 가능한 모든 객체를 탐색하고 표시한다.
  2. Sweep 단계
    • 힙 전체를 순회하며 표시되지 않은 객체를 제거한다.
  3. Compact 단계 (선택적)
    • 살아있는 객체들을 한쪽으로 모아 단편화를 줄이고 메모리 효율성을 높인다.

GC 최적화 방안
  • 불필요한 객체 생성 최소화
    • 반복문 내 객체 생성 지양
    • 문자열 결합 시 String 대신 StringBuilder 또는 StringBuffer 활용
  • 오브젝트 풀링(Object Pooling)
    • 미리 객체를 생성해 풀(Pool)에 저장, 필요할 때 빌려 쓰고 반납하여 반복 생성/소멸 비용 절감
  • 참조 관리
    • 사용 끝난 객체는 null 처리로 빠르게 GC 대상이 되도록 한다.
  • 컬렉션 관리
    • List, Map 등은 참조를 유지하므로 필요 시 clear() 호출로 비워준다.

GC의 장점
  1. 개발 생산성 향상 : 메모리 관리 로직 제거 → 비즈니스 로직에 집중 가능
  2. 안정성 확보
    • 메모리 누수 방지
    • 이중 해제, 댕글링 포인터 같은 치명적 오류 차단

GC의 단점
  1. 성능 부하 : GC 자체가 CPU 자원을 소모
  2. 예측 불가능성 : 실행 시점을 개발자가 직접 제어 불가
  3. Stop-the-World 문제 : GC 동작 시 모든 애플리케이션 스레드가 일시 중단되어 지연 발생 가능

'CS > C#_C++' 카테고리의 다른 글

C++ 캐스팅 연산자  (0) 2025.10.07
C++ STL(Standard Template Library)  (0) 2025.10.04
C# 클래스(Class)와 구조체(Struct)의 차이점  (0) 2025.10.03
C# 박싱(Boxing) 언박싱(Unboxing)  (0) 2025.10.03
(공통)C++과 C# 언어 특성 비교  (0) 2025.10.02