가비지 컬렉터는 자주 언급했던 것 같은데 중요한만큼 한번 더 짚고 가려고 적었다.
C#에서도 메모리 관리는 가비지 컬렉션과 메모리 할당을 통해 이루어지는데 C#은 node와 같이 자동으로 메모리를 관리하지만 개발자가 메모리 관리를 어떻게 최적화 할지에 대한 이해가 중요하다.
가비지 컬렉터는 더 이상 참조되지 않는 객체를 자동으로 메모리에서 해제하여 메모리 누수를 방지한다. 힙 메모리에서 객체를 추적한다.
가비지 컬렉션은 세대 기반으로 동작하는데 이 세대는 0,1,2 세가지로 구분된다.
세대 0은 새로 할당된 객체들이 존재하는 곳으로 자주 가비지 컬렉션이 존재하며 세대 1은 세대 0에서 살아남은 객체들이 위치하는 곳으로 덜 발생한다. 세대 2는 더 오래 살아남은 객체들이 위치하는 곳으로 제일 적게 GC가 발동한다.
Weak Reference - 가비지 컬렉터가 객체를 회수할 수 있도록 하는 참조 방식으로, WeakReference 클래스를 사용하여 참조 객체를 설정할 수 있으며 이는 메모리 누수를 방지하는 데 유용하다.
Finalize - 객체가 가비지 컬렉션되기 전에 호출되는 메서드로, 객체가 파괴될 때 마지막 정리 작업을 수행할 수 있다. 하지만 Finalize는 성능에 영향을 줄 수 있으므로, 가급적 Dispose()를 사용하는 것이 좋다.