가비지 컬렉션 알고리즘 (garbage collection algorithm)
쉽게 풀면
가비지 컬렉션은 프로그램이 실행되는 동안 더 이상 아무도 참조하지 않는 메모리(쓰레기)를 자동으로 찾아내 회수해주는 기능이다. 대표적인 방식으로는 각 객체를 참조하는 다른 객체의 수를 세다가 그 수가 0이 되면 즉시 회수하는 참조 카운팅 방식과, 프로그램의 시작점(루트)에서부터 도달 가능한 객체들을 표시(mark)하고 표시되지 않은 객체들을 청소(sweep)하는 마크-앤-스윕 방식이 있다. 개발자가 메모리 해제를 직접 관리하지 않아도 되는 편리함을 주지만, 그 대신 가비지 컬렉션이 실행되는 동안 프로그램이 잠시 멈추는 등의 성능 비용이 발생할 수 있다.
왜 중요한가
가비지 컬렉션 알고리즘은 프로그래밍 언어 런타임과 시스템 소프트웨어 연구에서 처리량, 지연시간, 메모리 사용량 사이의 근본적인 트레이드오프를 다루는 핵심 주제입니다. 특히 실시간 시스템이나 대규모 서버 애플리케이션에서는 컬렉션으로 인한 일시 정지가 서비스 품질에 직접적인 영향을 주기 때문에, 새로운 컬렉터 설계나 튜닝 기법에 대한 연구가 꾸준히 이어지고 있습니다. 최근에는 클라우드 환경의 비용 효율성과 저지연 요구가 맞물리면서 관련 논문의 실무적 중요성이 더욱 커지고 있습니다.
논문에서는 이렇게 쓰입니다
프로그래밍 언어 런타임의 자동 메모리 관리 방식과 그 성능 특성을 설명할 때 사용된다.
대규모 서버 시스템 연구에서 저지연 컬렉터 설계의 효과를 설명할 때 사용된다.
자원 제약이 큰 시스템 분야 논문에서 컬렉터 선택의 실무적 고려사항을 논의할 때 사용된다.
조금 더 깊게 보면
가비지 컬렉션 알고리즘은 크게 정지 시간을 줄이기 위한 동시(concurrent) 컬렉터와 병렬(parallel) 컬렉터로 발전해 왔으며, 힙을 여러 영역으로 나누어 생존 기간이 짧은 객체를 우선 회수하는 세대별(generational) 전략이 널리 쓰입니다. 논문에서는 처리량, 최대 정지 시간, 메모리 오버헤드 등을 함께 평가지표로 제시하는 경우가 많으며, 특정 워크로드에서의 벤치마크 결과를 통해 알고리즘 간 트레이드오프를 비교하는 방식이 일반적입니다.
주의할 점
가비지 컬렉션은 편리하지만 회수 시점을 예측하기 어렵고, 컬렉션 도중 프로그램 실행이 일시 정지되는 '스탑 더 월드' 현상이 발생할 수 있어 실시간성이 중요한 시스템에서는 신중한 튜닝이 필요하다.