garbage collector
c#이나 java와 같은 언어들은 vm의 gc가 메모리 관리를 수행한다.
1. 동작원리
- 실행시 프로세스는 stop-the-world 상태가 된다
- 정확히는 full GC가 이루어질 때 메모리를 복사하는 순간 할당을 막기 위해 stop-the-world 상태가 된 후 메모리의 이동이 완료되면 stop-the-world가 끝난다.
- CLR(command line runtime)은 루트라는 할당된 메모리 객체를 참조하는 목록을 가진다
- 가비지 콜렉터는 모든 메모리 공간을 쓰레기로 간주한다
가비지 콜렉터는 루트 목록을 순회하며 루트와 연관된 객체를 찾는다. 이 과정에서 루트를 참조하고 있는 객체를 다른 객체가 참조하고 있다면 해당 객체도 루트와 연관되어 있다고 판단한다
가비지 콜렉터는 쓰레기라고 간주한 공간을 비어있는 공간이라고 판단한다
- 가비지 콜렉터는 비어있는 공간에 인접 객체들을 차곡차곡 쌓는다
2. 세대별 가비지 콜렉션
- 방금 할당된 객체들을 0세대라고 함
- 0세대 가비지 콜렉션은 0세대 객체를 대상으로 수행
- 0세대 가비지 콜렉션에서 생존한 객체를 1세대라고 함
- 1세대 가비지 콜렉션은 1세대와 0세대 객체를 대상으로 수행
- 1세대 가비지 콜렉션에서 생존한 객체를 2세대라고 함
- 2세대 가비지 콜렉션은 2세대 1세대 0세대 객체를 대상으로 수행
- 2세대 가비지 콜렉션을 Full gc라고도 함