Java 의 Garbage Collection 은 자동 메모리 관리를 수행하는 프로세스이다. Java 프로그램이 JVM에서 실행될 때 객체는 프로그램 전용 메모리의 일부인 Heap Memory 에 생성되며, 그 중 대다수는 계속해서 사용되지 않는다. Garbage Collection은 이러한 개체를 찾아 삭제하여 메모리를 확보한다.

C/C++ 에서 프로그래머는 메모리를 위해 객체의 생성과 참조 해제를 직접 관여하지만, Java는 위 두 언어와 다른 방식으로. 메모리를 관리한다.

GC 는 두 가지 전제조건 하에 만들어졌다.

1. 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.

Heap 에 생성되는 대부분의 객체는 수명이 그리 길지 않기 때문에 이와 같은 가설을 세운것으로 해석된다.

2. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.


크게 2개의 물리적 공간으로 나눈다

Perm 영역은 JDK 8부터는 사라졌고, 추후 Native Memory 영역으로 옮겼다.

Young Generation (이하 Young 영역)

새로 생성된 객체들은 대부분 여기에 위치하며 생성된 객체들 중 대부분은 여기에서 사라진다. 이 영역에서 객체가 사라질때 Minor GC 가 발생한다고 말한다.

Old Generation (이하 Old 영역)

접근 불가능 상태로 되지 않아 위 Young 영역에서 살아남은 객체중 일부는 여기로 복사되며, 통상적으로 크기가 Young 영역보다 더 크기때문에 GC가 적게 발생하고 이 영역에서 객체가 사라질 때는 Major GC(Full GC) 가 발생한다고 말한다.