GC (Garbage Collection)와 ARC (Automatic Reference Counting)
Garbage Collection(GC)
GC는 프로그래밍 언어 또는 런타임 환경에서 더 이상 사용되지 않는 객체를 자동으로 식별하고 해제하는 메커니즘입니다.
작동 방식
1. 트래킹: 런타임 시스템은 메모리에서 모든 객체를 추적합니다.
2. 루트 세트 탐색: GC는 루트 세트 (전역 변수, 스택 변수 등)에서 시작하여 접근 가능한 객체를 탐색합니다.
3. 마킹: 접근 가능한 객체는 ‘마킹’되며, 그렇지 않은 객체는 수집 대상이 됩니다.
4. 수집: 마킹되지 않은 객체는 메모리에서 해제됩니다.
단점
- 성능 저하: GC가 작동하는 동안 애플리케이션이 일시적으로 멈출 수 있습니다(Stop-the-world).
- 예측 어려움: GC가 언제 작동할지 예측하기 어렵습니다.
Automatic Reference Counting(ARC)
ARC는 객체의 참조 횟수를 추적하여 객체의 수명을 관리하는 메모리 관리 기술입니다. ARC는 주로 컴파일 타임에 작동하며, 컴파일러가 자동으로 참조 카운트를 관리하는 코드를 삽입합니다.
작동 방식
- 컴파일 타임
- 코드 분석: 컴파일러는 소스 코드를 분석하여 객체의 생명주기를 추적합니다.
- 코드 삽입: 객체의 참조 횟수를 증가시키거나 감소시키는 코드를 자동으로 삽입합니다.
- 런타임
- 참조 카운트 관리: 컴파일 타임에 삽입된 코드가 런타임 동안 객체의 참조 카운트를 관리합니다.
- 메모리 해제: 참조 카운트가 0이 되면 객체가 메모리에서 해제됩니다.
단점
- 순환 참조 문제: 순환 참조가 발생하면 객체가 해제되지 않는 메모리 누수가 발생할 수 있습니다.