참고 사이트 : https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals
GC(가비지 컬렉션)는 힙을 3개의 세대로 나눈다.
새 객체는 0세대에 할당되며, 살아남을 경우 점차 상위 세대로 승격된다.
GC는 주로 0세대에서 자주 발생하며, 세대별로 효율적으로 메모리 회수된다.
예) 0세대 수집 후 메모리 부족하면 1세대, 2세대 순으로 수집.
대부분 객체는 금방 필요 없어지기 때문이다.
수명이 긴 객체와 짧은 객체를 구분해, 성능을 최적화하기 위해서다.
GC는 모든 객체 중 '활성 객체(참조 중인 객체)'만 추적해, 나머지(비활성 객체)의 메모리를 회수한다.
가비지 수집은 다음 단계들로 구성된다.
파일 핸들, 네트워크 연결 등은 가비지 컬렉터가 자동으로 정리하지 못한다.
이런 리소스를 사용하는 객체는 반드시 Dispose 메서드를 구현/호출해 명시적으로 해제해야 한다.
실수로 호출하지 않은 경우를 대비해 Finalize 메서드를 통해 해제하는 방법도 존재한다.