메모리 관리를 담당하는 시스템 또는 프로그램의 구성요소. 메모리에서 더 이상 사용되지 않는 객체를 찾아 제거하여 메모리를 회수하는 역할을 수행한다.
메모리 관리기술 중 하나로 가비지 컬랙터에 의해 수행되는 프로세스를 의미한다. 가비지 컬랙션은 프로세스 자체를 말하고, 실제 역할을 수행하는 주체는 가비지 컬랙터이다.
Unity & .Net의 GC
Root에서부터 사용하는 객체들을 타고 가면서 사용하는 객체들을 mark하고, 이후 mark되지 않은 객체들을 전부 제거한다.
세대(Generation) 방식을 사용한다. 할당된 메모리별로 0~2세대를 부여하여, 최적의 타이밍에 필요한 메모리를 해제할 수 있도록 관리한다.
힙 영역을 SOH(Small Object Heap)과 LOP(Large Object Heap)으로 구분하여, 큰 메모리를 할당하고 해체할 때의 부담을 줄인다.
매모리 재정렬은 SOH에서만 일어난다.
Stop the World 방식. 수행할 때마다, 실행 중인 프로그램을 중지하고 작업이 완료된 후에 실행을 재개하기 때문에, 프레임 드랍이 생길 수 있다.
GC가 수행되는 동안에는 모든 객체의 참조 관계를 추적하고 유효한(reachable) 객체들과 그렇지 않은(unreachable) 객체들을 식별하여 메모리를 회수해야한다. 이 작업은 매우 느리기 때문에, stop the world를 통해 일시적으로 애플리케이션을 멈추고 추적 작업을 수행한다.
Mark and Sweep이지만, 세대구분과 매모리 재정렬이 없다.
Unity 19버전 이상에서는 점진적 GC를 도입하였다.