답
GC는 가비지 컬렉터의 약자로 JVM의 힙 영역에서 사용하지 않는 객체를 삭제하는 프로세스를 의미합니다. 즉 자동으로 메모리를 관리해주는 작업의 총칭이며, 메모리 누수를 막아 안정적인 프로그래밍이 가능하도록 합니다.
씨언어와 같은 오래된 언어에서는 개발자가 직접 메모리를 관리해야 하지만 자바와 같이 새로운 언어들은 가비지 컬렉터를 도입했고, 이렇게 자동으로 메모리를 관리하는 언어를 매니지드 언어라고 합니다.
GC 루트에서부터 각각 참조하고 있는 객체들을 하나씩 탐색해 나갑니다. 이때 참조되지 않는 객체는 언써쳐블하다고 표현되며 가비지 컬렉트의 대상이 됩니다.
가비지 컬렉트는 마크앤 스윕 알고리즘을 이용하여 동작하게 됩니다. 마크는 GC Root로부터 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 알아서 마킹합니다.
즉 reachalbe한 객체와 unreachalble한 객체를 식별하는 과정이라고 할 수 있습니다.
그 다음 스왑 과정은 unreachable한 객체를 힙영역에서 삭제하는 과정입니다.
필요한 것들만 마킹한 다음 마크가 되지 않는 것들은 버리는 방식입니다.
힙의 구조는
영 영역과 올드 영역이 존재합니다.
영 영역은 새로운 객체들이 할당되는 곳이며
올드 영역은 영 영역에서 살아남은 객체들이 존재하는 영역입니다.
그 기준은 age 비트값이 있기 때문에 특정 age가 도달하면 올드 영역으로 옮겨지게 됩니다.
영 영역은 또한 에덴, 서바이벌0,1으로 나뉘어집니다.
새로운 객체가 에덴 영역에 할당되고 더이상 할당될 곳이 없다면 마이너 GC가 발생합니다.
마이너 GC가 발생하면 마크앤 스윕 과정이 일어납니다.
그리고 남은 객체는 위에 말씀드린 것처럼 age 값이 증가합니다.