가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap영역에서 동정으로 활당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스입니다.
가비지 컬렉션이 관리하는 힙영역은 객체의 생존기간을 기준으로 young 제너레이션 과 old 제너레이션 영역으로 구분되어있는데 Young은 Eden, survival0, survival1 으로 나누어져있습니다.
먼저 모든 객체는 처음 생성되면 Eden영역에 생성되며 Eden영역이 꽉 차게 되면, Mark-Sweep 알고리즘을 통해서 사용되지 않는 객체를 제거하게 됩니다. 살아남은 객체는 survival0 또는 1으로 넘어가게 되며, age(살아남은 횟수)가 1 오르게 됩니다. 이때 survival공간은 두개중 하나는 꼭 비워져있어야합니다. 그렇게 Eden영역이 꽉 차게 될때 마다 살아남은 객체를 옮기다 특정 age가 되면 old영역으로 넘어가게 됩니다. 지금까지가 minor-GC(Young 영역에서의 가비지 컬렉션 동작 방식)입니다. Young영역보다 크기가 큰 old영역은 꽉차게 되면 major-GC(full-GC라고도합니다.)가 작동되고 모든 old영역에 있는 객체들을 Mark-Sweep알고리즘을 통해서 사용되지 않는 객체를 제거하게 됩니다.
추가적으로 major-GC는 Minor-GC보다 10배 정도 속도 차이가 납니다.