.NET은 **garbage collector(GC)**를 통해 메모리를 자동으로 관리합니다 — 관리되는 힙에 객체를 할당하고 더 이상 도달할 수 없는 객체를 회수하므로, 메모리를 수동으로 해제하지 않습니다. GC(세대별, 스택/힙 분리, IDisposable)를 이해하는 것은 성능과 정확성에 중요합니다.
스택 vs 힙
스택 → 값 타입(지역 변수), 메서드 프레임; 빠르고, 스코프 종료 시 자동 해제.
힙 → 참조 타입 객체(class 인스턴스); GC가 관리.
참조 변수는 스택에 있지만 힙에 있는 객체를 가리킴.
세대별 garbage collector
GC는 힙을 세대(GENERATION)로 나눔("대부분의 객체는 일찍 죽는다"는 발상 기반):
Gen 0 → 가장 새로운 객체; 자주 수집(빠르고 저렴)
Gen 1 → 한 번의 수집에서 살아남음
Gen 2 → 오래 사는 객체; 드물게 수집(비쌈)
(+ 큰 객체를 위한 Large Object Heap)
→ 젊은 세대를 자주 + 오래된 세대를 드물게 수집하여 GC를 효율적으로 만듦.
