[C#] 가비지 콜렉션

natae·2022년 8월 9일
0

Csharp

목록 보기
2/9

개요

  • CLR이라는 가상 머신에서 진행
  • 압축과 세대별GC를 사용
    • 압축: 가비지 콜렉션 이후 메모리 단편화를 막기 위해 메모리 빈공간 없이 당겨오는 작업
    • 세대별GC: 힙영역을 세대별로 분리하여 가비지 컬렉션 범위를 효율적으로 사용(최근 세대가 오래된 세대보다 더 빈번하게 발생)
      • 오래된 세대가 최근 세대쪽 메모리를 참조할 경우, 최근 세대에서 가비지 콜렉션이 일어나면 null pointer가 발생
      • 이를 방지하기 위해 이러한 상황은 별도로 관리해야하는 write barrier 처리가 필요

알고리즘

  1. 객체 할당시 관리 힙에 추가한다.
  2. 그 중 0세대의 최대 용량에 도달하면 GC가 발생한다.
  3. 추적 참조를 하면서 참조가 0인 객체를 선별
  4. 해당 객체를 해제하면서, 빈 공간없게 당겨옴(재정렬)
  5. 살아남은 객체들을 1세대로 보내고, 0세대는 비게 됨
  6. 1~5를 반복하며, 만약 N세대도 최대 용량에 도달하면 0세대와 같이 GC 발생
  7. 최대 2세대 까지 존재하며, 최대 용량은 스스로 학습하면서 정해짐

참고문헌

profile
서버 프로그래머

0개의 댓글