가비지 수집

업데이트: 2007년 11월

.NET Framework 가비지 수집기는 응용 프로그램의 메모리 할당 및 해제를 관리합니다. 사용자가 new 연산자를 사용하여 개체를 만들 때마다 런타임에서는 관리되는 힙에서 해당 개체에 메모리를 할당하며 관리되는 힙에 주소 공간이 남아 있으면 새 개체에 필요한 공간을 계속하여 할당합니다. 그러나 메모리는 한정되어 있기 때문에 시간이 지나면 가비지 수집기가 수집을 수행하여 일부 메모리를 해제해야 합니다. 가비지 수집기의 최적화 엔진은 할당되는 메모리에 기반하여, 가비지를 수집할 가장 좋은 시기를 파악합니다. 가비지를 수집할 때 가비지 수집기는 응용 프로그램에서 더 이상 사용하지 않는 관리되는 힙에서 개체를 확인하고 메모리를 회수하는 데 필요한 작업을 수행합니다.

이 단원에서는 응용 프로그램의 관리되는 개체에 대해 가비지 수집기가 자동으로 메모리를 할당하고 해제하는 방법을 설명하며, 응용 프로그램에서 만들어지는 관리되지 않는 개체를 제대로 정리하는 데 권장되는 디자인 패턴에 대해서도 설명합니다.

참고:

.NET Framework 버전 1.0에서는 CLR(공용 언어 런타임)에 대형 개체 힙에 대한 개별 메모리 관리자가 있습니다. 경우에 따라 이 메모리 관리자는 사용되지 않은 메모리를 운영 체제에 반환하지 않고, 일부의 경우 가비지 수집용으로 메모리를 사용할 수 없도록 합니다. 이렇게 되면 가상 주소 공간 단편화로 인해 메모리 할당에 오류가 발생합니다. .NET Framework 버전 1.1 및 2.0에서는 대형 개체 힙이 가상 메모리 단편화를 최소화하도록 적절히 정렬된 힙 세그먼트라는 연속적인 메모리 영역으로 구성되어 있습니다. 가비지를 수집하는 동안 대형 개체에서 회수한 공간이 통합되고 자유 목록에 배치됩니다. 자유 목록 항목만 들어 있는 힙 세그먼트가 비워지고 해당 메모리는 운영 체제로 반환됩니다. 대형 개체 힙을 이렇게 변경하여 이러한 형태의 가상 주소 공간 단편화로 인한 메모리 할당 오류를 효율적으로 해결하였습니다.

중요:

2GB 이상의 메모리를 가진 서버에서 boot.ini 파일에 /3GB 스위치를 지정해 두면 해당 시스템에서 메모리를 사용할 수 있음에도 불구하고 발생하는 메모리 부족 문제를 방지할 수 있습니다.

단원 내용

  • 개발자에 따른 메모리 관리
    관리 코드를 사용하는 작업에 대해 이전에 Visual Basic, C++ 및 COM을 사용하던 개발자가 알아야 할 변경 사항에 대해 설명합니다.

  • Finalize 메서드 및 소멸자
    가비지 수집기가 개체의 메모리를 자동으로 회수하기 전에 Finalize 메서드 및 소멸자를 통해 해당 개체에서 필요한 정리 작업을 수행하도록 하는 방법에 대해 설명합니다.

  • 약한 참조
    응용 프로그램에서 개체에 계속 액세스하는 동안 가비지 수집기가 해당 개체를 수집할 수 있도록 하는 기능에 대해 설명합니다.

  • 인덱싱된 컬렉션
    개체를 즉시 또는 적절한 다음 시간에 회수하는 방법에 대해 설명합니다.

  • 대기 모드
    가비지 수집의 실행 시기를 결정하는 모드에 대해 설명합니다.

  • 공유 웹 호스팅을 위한 최적화
    여러 개의 작은 웹 사이트를 호스팅하여 공유되는 서버에 대해 가비지 수집을 최적화하는 방법에 대해 설명합니다.

  • 가비지 수집 알림
    전체 가비지 수집이 임박한 시점과 완료된 시점을 확인하는 방법에 대해 설명합니다.

  • 관리되지 않는 리소스 정리
    관리되지 않는 리소스를 정리하는 데 권장되는 디자인 패턴에 대해 설명합니다.

참조

  • System.GC
    시스템 가비지 수집기와 상호 작용하는 데 필요한 메서드를 제공합니다.

  • Object.Finalize
    가비지 수집기가 개체를 회수하기 전에, 해당 개체가 리소스 해제 및 기타 정리 작업을 시도하도록 합니다.

  • System.IDisposable
    리소스 클래스의 기능에 대해 설명합니다.

관련 단원