1. 메모리 관리 기법 개요
- 프로그램 실행 중 동적으로 할당된 메모리가 더 이상 사용되지 않음에도 반환되지 않는 경우 메모리 누수가 발생함
- 이를 방지하고 가비지(garbage)를 정리하여 메모리 공간을 효율적으로 재활용하기 위한 기법이 필요함
- 대표적인 가비지 수집(Garbage Collection) 방식으로 Mark and Sweep, Compacting, Copying 방식 등이 존재함
- 각 기법은 메모리 단편화(Fragmentation) 해소 수준, 처리 속도, 시스템 부하 등에 따라 장단점이 상이함
2. 주요 메모리 관리 기법 정의 및 처리 절차
가. Mark and Sweep 기법
- Marking 단계: 루트(root) 객체에서 도달 가능한 객체를 탐색하고, 해당 객체에 도달 표시(mark) 부여
- Sweeping 단계: 전체 힙 영역을 선형 탐색하며, mark되지 않은 객체들을 해제(free)
- 특징:
- 객체 참조 그래프 기반으로 생존 여부를 판단함
- 해제된 영역이 메모리상 산발적으로 존재하여 외부 단편화 발생 가능
- 정리만 수행하며 이동(compaction)되지 않음
나. Compaction 기법
- Mark and Sweep 이후의 추가 단계로 동작함
- 생존한 객체를 메모리 상단으로 이동시켜 연속적인 여유 공간을 확보함
- 객체 참조 주소를 일괄적으로 갱신해야 하므로 오버헤드가 큼
- 단편화 제거 측면에서 가장 효과적이며, 메모리 할당 효율성 극대화 가능
다. Copying 기법 (Copy Collector)
- 메모리를 두 개의 반(From-space, To-space)으로 분할하여 운영
- 루트에서 도달 가능한 객체만 To-space로 복사하며, From-space는 이후 전체 초기화
- 객체 이동 시 참조 주소도 함께 갱신되어야 함
- 매 수집 주기마다 전체 메모리 절반만 사용 가능하므로 비효율적일 수 있음
- 주로 단기 객체가 많은 환경에서 성능 우수 (e.g., generational GC)
3. 주요 비교 항목별 분석
구분 | Mark & Sweep | Compaction | Copying Collector |
---|---|---|---|
수집 절차 | Mark → Sweep | Mark → Sweep → Compact | Copy (From → To) |
메모리 단편화 | 외부 단편화 심함 | 단편화 해소 가능 | 단편화 없음 |
객체 이동 | 없음 | 있음 (주소 변경 발생) | 있음 (주소 변경 발생) |
구현 복잡도 | 비교적 단순 | 주소 재계산 복잡성 존재 | 주소 갱신 포함하여 복잡 |
처리 속도 | 느림 (2단계 처리) | 느림 (추가 compaction 수행) | 빠름 (단기 객체 처리에 최적) |
공간 효율 | 메모리 사용 효율 중간 | 메모리 연속성 확보 가능 | 메모리 절반만 사용 가능 |
장점 | 구현 간단, 객체 참조 안정적 | 할당 성능 우수, 단편화 없음 | 빠른 GC, young generation 적합 |
단점 | 단편화 존재, GC 중단 시간 큼 | 주소 갱신 필요, 처리 비용 큼 | 공간 낭비, 주소 이동 수반 |
4. 최신 가비지 컬렉션 기법과의 연계
- 현대의 GC 엔진은 위 방식들을 하이브리드로 적용함
- 예) Java HotSpot VM의 GC 알고리즘
- Young 영역: Copying 방식 (Scavenge, Minor GC)
- Old 영역: Mark-Sweep-Compact 방식 (Major GC)
- Generational GC 개념: 객체 수명 주기에 따라 분리하여 GC 효율성 제고
- Concurrent GC, Incremental GC 등의 방식으로 멈춤 시간(STW)을 줄이려는 시도 확산됨
5. 메모리 관리 기법 선택 시 고려사항
- 대상 프로그램의 객체 수명 주기 패턴 파악 필요 (단기 객체 다수 vs 장기 객체 위주)
- 메모리 사용량 대비 GC 성능 최적화 필요
- 실시간성 요구가 큰 경우에는 GC 시간 최소화 중요
- 객체 참조 변경이 민감한 시스템의 경우 Compaction 또는 Copying 방식은 부적합 가능성 존재
6. 결론
- 메모리 관리 기법은 시스템 성능 및 안정성에 결정적인 영향을 미침
- 단편화 해소, 처리 시간, 구현 난이도 등을 균형 있게 고려하여 선택 필요
- 현대 시스템에서는 다양한 방식의 혼합 운용을 통해 GC 효율성 확보 추세
'IT Study > SW 개발 및 프로그래밍' 카테고리의 다른 글
💻 CLI vs GUI 아키텍처 설계 방식 비교와 UX 고려 요소 (1) | 2025.04.19 |
---|---|
💻 리눅스 커널 모듈 개발의 기본 구조 및 메모리 접근 제한 분석 (0) | 2025.04.18 |
💻 인터프리터 언어의 메모리 구조(Stack, Heap) 이해 (0) | 2025.04.16 |
💻 가비지 컬렉션(Garbage Collection) 방식과 메모리 누수 추적 (1) | 2025.04.15 |
💻 로깅 구조 설계(Log Level, Format, Rotation, 모니터링 연계) (0) | 2025.04.14 |