오브젝트를 선언할 때 해당 오브젝트는 힙에 할당되며, 이 오브젝트를 가리키는 주소 값이 스택에 저장되는 것이다.
가비지 컬렉터
스택에서는 후입선출 방식으로 메모리를 관리하지만, 힙 영역은 가비지 컬렉터라는 것이 자동으로 관리를 해준다.
힙 영역에 있는 메모리의 주소는 스택에 저장되어 있지만, 스택에 주소가 저장되어 있지 않다면, 값을 찾을 수 없다.
그래서 C#에서는 가비지 컬렉터가 존재하며, 주소가 삭제되어 더이상 접근이 불가능해진 힙 영역의 메모리를 알아서 삭제시킨다.
그러나 삭제 시점이 언제인지 알 수 없다. 그래서 개발자가 예측할 수 없는 시점에 돌아 성능에 영향을 주기 때문에 자주 발생하지 않도록 하는게 좋다고 한다.
그래서 객체를 너무 많이 할당하거나 큰 객체는 할당을 최소화하는게 좋다. 그래서 프로젝트를 진행할 때 오브젝트 풀링으로 관리했었다.
가비지 컬렉터 동작방식
가비지 컬렉터는 세대별 가비지 수집 방식으로 동장한다.
메모리를 0, 1, 2의 3개의 세대로 나누어서 가비지로 분류가 된 것을을 축적하다가 임계치가 넘어가면 삭제 및 정렬을 실행한다.