가비지 컬렉션 및 메모리 관리
메모리 관리는 프로그램이 메모리를 할당하고 회수하는 방식을 제어하며, 가비지 컬렉션은 더 이상 접근할 수 없는 객체를 식별하고 해제함으로써 회수 과정을 자동화합니다.
Definition
메모리 관리는 프로그램 메모리의 할당 및 회수를 의미하며, 가비지 컬렉션은 프로그램이 더 이상 접근할 수 없는 객체가 차지하는 메모리를 해제하여 프로그래머가 명시적인 할당 해제 작업을 수행할 필요가 없도록 하는 자동 회수 방식입니다.
Scope
이 주제는 언어 런타임을 위한 자동 및 수동 메모리 관리를 다룹니다: 참조 카운팅, 마크-스윕, 복사, 세대별 컬렉션; 도달 가능성 추적; 처리량, 일시 중지 시간 및 메모리 오버헤드 간의 절충. 또한 동시 및 점진적 컬렉터와 컬렉션 전략 및 언어 설계 간의 관계를 다룹니다.
Core questions
- 컬렉터는 어떤 객체가 여전히 필요한지 어떻게 판단합니까?
- 처리량, 지연 시간 및 메모리 사용량 간의 절충점은 무엇입니까?
- 객체를 연령별로 분리하는 것(세대별 컬렉션)이 효율성을 향상시키는 이유는 무엇입니까?
- 컬렉션이 대화형 또는 실시간 시스템에서 긴 일시 중지를 피하는 방법은 무엇입니까?
Key theories
- 추적 가비지 컬렉션
- 매카시(McCarthy)는 Lisp를 위해 자동 가비지 컬렉션을 도입하여 프로그램의 루트에서 도달 가능한 객체를 추적하여 메모리를 회수하는 개념을 확립했습니다.
- 세대별 컬렉션
- 리버만(Lieberman)과 휴잇(Hewitt)은 대부분의 객체가 일찍 소멸된다는 것을 관찰하고, 젊은 세대를 더 자주 수집함으로써 실제 컬렉션 비용을 극적으로 줄일 수 있다고 제안했습니다(세대 가설).
- 컬렉션 기술의 분류
- 윌슨(Wilson)과 가비지 컬렉션 핸드북(Garbage Collection Handbook)은 참조 카운팅, 마크-스윕, 복사, 점진적 및 동시 컬렉터의 설계 공간과 성능 절충점을 체계화합니다.
Clinical relevance
자동 메모리 관리는 매달린 포인터(dangling pointers) 및 메모리 누수(memory leaks)와 같은 전체적인 버그 클래스를 제거하며, 이것이 대부분의 고급 언어가 가비지 컬렉션에 의존하는 이유입니다. 컬렉터 선택은 특히 대화형 및 서버 시스템에서 애플리케이션 지연 시간과 처리량에 큰 영향을 미칩니다.
History
매카시(McCarthy)는 1960년 Lisp와 함께 가비지 컬렉션을 도입했습니다. 이후 복사 컬렉션(Cheney)과 참조 카운팅이 등장했으며, 리버만(Lieberman)과 휴잇(Hewitt)의 1983년 세대별 컬렉터는 객체 수명을 활용했습니다. 이후 수십 년 동안 점진적, 동시 및 영역 기반 컬렉터가 개발되었으며, 이는 1992년 윌슨(Wilson)의 저서와 2011년 가비지 컬렉션 핸드북(Garbage Collection Handbook)에 포괄적으로 정리되어 있습니다.
Debates
- 자동 컬렉션 대 수동 또는 소유권 기반 관리
- 설계자들은 안전하고 편리하지만 일시 중지 및 오버헤드를 유발할 수 있는 가비지 컬렉션과, 프로그래머의 부담과 위험을 감수하는 대신 예측 가능한 성능과 낮은 메모리 사용량을 제공하는 수동 또는 소유권 기반 관리 사이에서 논쟁합니다.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- 가비지 컬렉터는 어떤 객체를 해제해야 하는지 어떻게 압니까?
- 추적 컬렉터는 스택 변수 및 전역 변수와 같은 알려진 루트에서 시작하여 참조를 따라 모든 도달 가능한 객체를 표시합니다. 도달하지 못한 모든 것은 도달 불가능하며 회수될 수 있습니다.
- 세대별 가비지 컬렉션이 효과적인 이유는 무엇입니까?
- 대부분의 객체는 할당 직후 도달 불가능해지기 때문에, 젊은 세대를 자주 수집하면 대부분의 가비지를 저렴하게 회수할 수 있으며, 오래 살아남은 객체는 훨씬 덜 자주 스캔됩니다.