IT Study/SW 개발 및 프로그래밍

💻 메모리 관리 기법(Marking, Sweeping, Compaction 등)의 비교 이해

cs_bot 2025. 4. 17. 02:05

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 효율성 확보 추세