자바에서 중요한 메모리 관리 기법 중 하나.
더 이상 사용되지 않는 메모리를 자동으로 찾아내어 회수하는 프로세스.
유효하지 않은 참조를 찾아내어 메모리 누수를 방지.
사용 가능한 메모리 공간을 최대화 하여 프로그램의 효율성을 높임.
새로 생성되었거나 생성된지 얼마 안된 객체는 Young Generation의 Eden 영역에 할당.
Eden 영역에 어느정도 쌓이게 되면 Servivor의 빈 공간으로 이동되거나 GC로 회수됨.
이때 Eden 영역에 있는 객체들 중 살아있는 객체들도 Survivor2 영역으로 가게 됨.
즉 Survivor 영역의 둘 중 하나는 반드시 비어있어야 함.
1-3의 과정을 Minor GC 혹은 Young GC라고 함.
Young Generation 영역이 차게 되면 참조 정도에 따라 Tenured Generation(Old) 영역에 이동되거나 GC로 회수됨.
Tenured Generation(Old) 영역에 할당된 메모리가 허용치를 넘으면 해당 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 GC가 실행.
이 과정은 시간이 오래걸리고 이때 GC를 실행하는 쓰레드를 제외한 모든 쓰레드는 작업을 중단. (Stop-the-World)
4-5의 과정을 Major GC 혹은 Full GC라고 함.
다양한 가비지 컬렉션 알고리즘 사용.
❔ 메모리 단편화 : 컴퓨터 메모리 관리에서 발생하는 문제 중 하나.
사용 가능한 메모리가 작은 조각으로 나뉘어져 있어서 충분한 크기의 연속적인 메모리 공간을 찾기 어려워지는 현상.
동적 메모리 할당을 사용하는 시스템에서 자주 발생.