
Memory Management & GC
Garbage Collection, 세대, 종료화(finalization), IDisposable, using 문, 메모리 누수, 프로파일링
1.NET의 Garbage Collector(GC)란 무엇인가요?
.NET의 Garbage Collector(GC)란 무엇인가요?
답변
Garbage Collector는 managed heap에서 사용되지 않는 객체를 해제하는 자동 메모리 관리 메커니즘입니다. 메모리를 수동으로 해제해야 하는 C/C++와 달리, 메모리 누수를 방지하기 위해 백그라운드에서 자동으로 실행됩니다. GC는 객체 참조를 분석하여 애플리케이션의 root에서 더 이상 접근할 수 없는 객체를 수집합니다.
2.NET의 Garbage Collector에는 어떤 세 가지 세대가 있나요?
.NET의 Garbage Collector에는 어떤 세 가지 세대가 있나요?
답변
.NET GC는 세 가지 세대를 사용합니다. Gen0(짧은 수명의 신규 객체, 자주 수집됨), Gen1(중간 수명 객체, Gen0과 Gen2 사이의 버퍼 영역), Gen2(긴 수명의 객체, 비용이 크기 때문에 드물게 수집됨). 이 세대별 시스템은 객체의 80~90%를 차지하는 단명 객체(Gen0)를 먼저 수집하고 영속적인 객체(Gen2)를 자주 스캔하지 않음으로써 성능을 최적화합니다.
3.NET의 Large Object Heap(LOH)이란 무엇인가요?
.NET의 Large Object Heap(LOH)이란 무엇인가요?
답변
Large Object Heap는 85 KB 이상의 객체를 위한 별도의 메모리 공간으로, 논리적으로 Gen2에 속합니다. 정기적으로 압축(compaction)되는 표준 heap과 달리, LOH는 큰 객체를 복사하는 비용을 피하기 위해 기본적으로 압축되지 않습니다. 이로 인해 메모리 단편화가 발생할 수 있습니다. .NET 4.5.1부터는 GCSettings.LargeObjectHeapCompactionMode를 사용해 LOH 압축을 수동으로 활성화할 수 있습니다.
.NET에서 IDisposable 패턴의 역할은 무엇인가요?
C#에서 using 문은 무엇을 합니까?
+19 면접 질문