GC란 무엇인가?
GC(Garbage Collection, 가비지 컬렉션)는 자동 메모리 관리 기법으로, 프로그램이 동적으로 할당했던 메모리 중 더 이상 필요하지 않은 영역을 찾아 해제한다. C의 free()나 C++의 delete처럼 개발자가 직접 메모리를 관리하지 않아도 되며, Java, C#, Python 등에서 주로 사용된다.
- 가비지(Garbage) : 힙 영역에 생성된 객체 중 어디서도 참조하지 않아 접근 불가능한 객체.
GC의 기본 동작 방식 : Mark and Sweep
- Mark 단계
- 루트 집합(Root Set: 스택 변수, 전역 변수 등)에서 시작해 참조 가능한 모든 객체를 탐색하고 표시한다.
- Sweep 단계
- 힙 전체를 순회하며 표시되지 않은 객체를 제거한다.
- Compact 단계 (선택적)
- 살아있는 객체들을 한쪽으로 모아 단편화를 줄이고 메모리 효율성을 높인다.
GC 최적화 방안
- 불필요한 객체 생성 최소화
- 반복문 내 객체 생성 지양
- 문자열 결합 시 String 대신 StringBuilder 또는 StringBuffer 활용
- 오브젝트 풀링(Object Pooling)
- 미리 객체를 생성해 풀(Pool)에 저장, 필요할 때 빌려 쓰고 반납하여 반복 생성/소멸 비용 절감
- 참조 관리
- 사용 끝난 객체는 null 처리로 빠르게 GC 대상이 되도록 한다.
- 컬렉션 관리
- List, Map 등은 참조를 유지하므로 필요 시 clear() 호출로 비워준다.
GC의 장점
- 개발 생산성 향상 : 메모리 관리 로직 제거 → 비즈니스 로직에 집중 가능
- 안정성 확보
- 메모리 누수 방지
- 이중 해제, 댕글링 포인터 같은 치명적 오류 차단
GC의 단점
- 성능 부하 : GC 자체가 CPU 자원을 소모
- 예측 불가능성 : 실행 시점을 개발자가 직접 제어 불가
- 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 |