[C#] garbage collector

garbage collector

c#이나 java와 같은 언어들은 vm의 gc가 메모리 관리를 수행한다.

1. 동작원리

  • 실행시 프로세스는 stop-the-world 상태가 된다
  • 정확히는 full GC가 이루어질 때 메모리를 복사하는 순간 할당을 막기 위해 stop-the-world 상태가 된 후 메모리의 이동이 완료되면 stop-the-world가 끝난다.
  1. CLR(command line runtime)은 루트라는 할당된 메모리 객체를 참조하는 목록을 가진다
  2. 가비지 콜렉터는 모든 메모리 공간을 쓰레기로 간주한다
  3. 가비지 콜렉터는 루트 목록을 순회하며 루트와 연관된 객체를 찾는다. 이 과정에서 루트를 참조하고 있는 객체를 다른 객체가 참조하고 있다면 해당 객체도 루트와 연관되어 있다고 판단한다

  4. 가비지 콜렉터는 쓰레기라고 간주한 공간을 비어있는 공간이라고 판단한다

  5. 가비지 콜렉터는 비어있는 공간에 인접 객체들을 차곡차곡 쌓는다

2. 세대별 가비지 콜렉션

  • 방금 할당된 객체들을 0세대라고 함
  • 0세대 가비지 콜렉션은 0세대 객체를 대상으로 수행
  • 0세대 가비지 콜렉션에서 생존한 객체를 1세대라고 함
  • 1세대 가비지 콜렉션은 1세대와 0세대 객체를 대상으로 수행
  • 1세대 가비지 콜렉션에서 생존한 객체를 2세대라고 함
  • 2세대 가비지 콜렉션은 2세대 1세대 0세대 객체를 대상으로 수행
  • 2세대 가비지 콜렉션을 Full gc라고도 함
Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/04/Languages/CSharp/garbage-collector/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.