Q. 가비지 컬렉션이란 무엇인가요?
- 메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능입니다.
- 즉, 동적 할당된 메모리 영역(힙 메모리 영역) 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제하는 기법입니다.
Q. 가비지 컬렉션의 실행 시점은?
- JVM이 메모리가 부족해지면 OS에 추가로 메모리 요청을 할 때 가비지 컬렉션이 실행됩니다.
Q. 가비지 컬렉션의 종류는 어떤것들이 있을까요?
- 메이저 GC: Old, Perm 영역에서 발생하는 GC
- 마이너 GC : Young 영역에서 발생하는 GC
- 풀 GC : 메모리 전체를 대상으로 하는 GC
객체 GC과정 참고
Q.객체가 생성되어 메모리에 올라간 후 사용하지 않을 때 GC되기까지의 과정?
- 객체가 생성되어 Eden 영역에 올라갑니다.
- 처음 생성된 객체는 Eden 영역에 할당됩니다. 이후 Eden영역이 꽉 찬다면 할당이 해제되지 않은 객체를 Servior 영역으로 이동시킵니다.
- Eden 영역이 꽉 차면 Servior영역으로 넘어갑니다. 단 Servior 영역중 하나는 반드시 비어있어야 합니다.
- Servior 영역에 있는 객체는 올라가있는 Servior 영역이 꽉 찰 때 다시 GC 심사를 받습니다. 할당이 되어있고 아직 사용중이라는 판단이 들면 다른 Servior 영역으로 이동합니다.
- 단 여기서 Servior 영역을 거치지 않고 바로 Old 영역으로 이동하는 경우가 있습니다. 바로 객체의 크기가 Servior 영역의 크기보다 큰 경우입니다
- 이 과정에서 오랫동안 살아남은 객체는 Old 영역으로 이동한다.
- Old 영역에 들어간 객체는 풀 GC, 메이저GC가 발생하지 않는한 GC되지 않습니다.