힙 영역에 있는 더이상 사용하지 않는 메모리를 가비지라고 한다. 이러한 가비지를 JVM의 가바지 컬렉터가 알아서 정리해 준다. C언어에서 동적할당 이후 free를 선언해주는 것을 자동으로 해주는 것이다.
가비지컬렉터는 메모리를 주기적으로 검사하여 정리한다.
JVM의 힙영역은 다음과 같은 두가지 전제로 설계되었다.
즉 객체는 대부분 일회성이며 메모리에 오래 남아있는 경우는 드물다. 따라서 객체의 생존 기간에 따라 Old, Young영역으로 나뉘게 되었다. (Java8이전에는 Perm영역도 존재했다고 함)
Old, Young영역은 다른 구조이지만 공통적으로 아래와 같은 단계를 거친다.
[1] STOP THE WORLD
[2] MARK AND SWEEP
Mark : 사용되는 메모리와 사용되지 않는 메모리를 식별한다.
Sweep : Mark 단계에서 사용되지 않음으로 식별된 메모리를 해제한다.
Minor GC의 동작방식 부터 다음편에 살펴보도록 하자