사용하지 않는 객체는 메모리에서 삭제하는 작업
JVM에서 수행(힙 메모리만 다룸)
C/C++ 언어와 달리 자바는 개발자가 명시적으로 객체를 해제할 필요가 없음
1) Marking : GC Root로 부터 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹
2) Sweep : Unreachable한 객체들을 Heap에서 제거
3) Compact (optional) : Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 나눔
[참고 자료]