GC(Garbage Collection, 가비지 컬렉션)는 더 이상 사용되지 않는 메모리를 자동으로 탐지하고 회수하여, 메모리 누수를 방지하고 안정적인 메모리 관리를 가능하게 하는 기술입니다.
프로그래밍 언어에서 객체를 생성하면 힙(Heap) 메모리에 저장됩니다. 객체 사용이 끝난 후에도 명시적으로 제거하지 않으면 메모리가 낭비되거나 누수(Memory Leak)가 발생할 수 있습니다.
이를 방지하기 위해 GC는:
GC는 일반적으로 다음 세 단계를 거칩니다:
대표 예: Java HotSpot VM (G1, Parallel GC 등), .NET CLR
대표 예: Python, Objective-C, Swift (ARC)
언어 | GC 방식 | 특징 |
---|---|---|
Java | Generational + Tracing | G1, ZGC, Shenandoah 등 다양함 |
Python | Reference Counting + Cycle Detector | 순환 참조 탐지 추가 |
JavaScript (V8) | Generational GC + Incremental + Concurrent | 짧은 GC 지연 목표 |
.NET (C#) | Generational GC + Compacting | Background GC 지원 |
Go | Concurrent Mark and Sweep + STW(Pause) 최소화 | Soft real-time GC |
Swift | ARC (Automatic Reference Counting) | 컴파일 타임 참조 관리 |
-Xms
, -Xmx
, -XX:+UseG1GC
등으로 제어Object Pool
, ThreadLocal
, Flyweight Pattern
활용GC는 메모리 관리를 자동화하여 개발자의 부담을 줄여주지만, 내부 구조와 알고리즘을 이해하지 못하면 예기치 못한 성능 저하가 발생할 수 있습니다. 특히 고성능 시스템, 대규모 트래픽 처리 시스템에서는 GC 알고리즘 선택, 힙 구조 설계, 튜닝 전략 등이 소프트웨어 아키텍처의 품질에 직결됩니다.
필요하시면 Java G1GC, Python의 gc 모듈 예제, 혹은 GC 로그 분석 방법도 안내드릴 수 있습니다.