.NET 프레임워크의 가비지 수집
New 키워드를 사용하여 생성된 개체들은 managed 힙에 들어간다. 그러면 .NET은 이 개체에 필요한 메모리를 계산해서 힙에 빈 공간이 충분히 있는지 확인한다.
만약 Managed힙 상에 메모리를 할당할 수 없다면 가비지 수집기가 실행되어 사용되지 않는 메모리들을 해제하게 된다.
이 가비지 수집기는 다음과 같은 2가지 가정을 통해 행동을 하게 된다.
1. 최근에 생성된 개체들일수록 수명이 짧을 것이다.
2. 이미 오랫동안 존재해온 개체들은 앞으로도 한동안 살아있을 것이다.
또한 .NET 프레임워크에는 총 삼대가 존재한다.
0세대에서는 최근에 추가된 모든 메모리들을 저장한다.
시간이 지나 힙이 가득차면 가비지 수집기가 실행돼서 활동 중인 모든 개체들을 1세대로 보내고, 0세대의 모든 메모리를 해제한다.
만약 1세대또한 메모리가 꽉 차면 동일한 과정을 통해 활동중인 개체들은 2세대로 보내게 되고, 2세대마저 꽉 차게되면 값비싼 가비지 수집 연산이 일어나게 된다.
어떠한 개체의 크기가 무척이나 커서 0,1세대에 들어가지 않게되면 곧바로 2세대로 보내게 된다는 것도 참고하자!
따라서 개체를 생성하는 시기와 방법을 잘 생각해서 코딩을 하는것이 중요한데.. 매우 큰 개체들은 생성하지 않는 게 좋고 일단 생성된 개체들의 수명을 짧게 해서 1세대로 옮겨지지 않도록 하는 것이 좋다.
결국은 크기도 크고, 수명도 긴 개체들을 줄이는 방법을 찾아야 한다.