System.GC 클래스

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

클래스는 GC 가비지 수집기를 제어합니다. 가비지 수집기는 관리되는 메모리의 할당 및 해제를 제어하는 공용 언어 런타임 구성 요소입니다. 이 클래스의 메서드는 개체에서 가비지 수집이 수행되고 개체에서 할당한 리소스가 해제될 때 영향을 줍니다. 이 클래스의 속성은 시스템에서 사용할 수 있는 총 메모리 양과 개체에 할당된 메모리의 연령 범주 또는 생성에 대한 정보를 제공합니다.

가비지 수집기는 관리되는 메모리에 할당된 개체를 추적하고 회수합니다. 가비지 수집기는 정기적으로 가비지 수집을 수행하여 유효한 참조가 없는 개체에 할당된 메모리를 회수합니다. 가비지 수집은 사용 가능한 사용 가능한 메모리를 사용하여 메모리 요청을 충족할 수 없는 경우 자동으로 발생합니다. 또는 애플리케이션 사용 하 여 가비지 컬렉션 강제할 수는 Collect 메서드.

가비지 수집은 다음 단계로 구성됩니다.

  1. 가비지 수집기는 관리 코드에서 참조되는 관리되는 개체를 검색합니다.
  2. 가비지 수집기는 참조되지 않은 개체를 종료하려고 합니다.
  3. 가비지 수집기는 참조되지 않은 개체를 해제하고 메모리를 회수합니다.

관리되지 않는 리소스

컬렉션 중에 가비지 수집기는 관리 코드에서 개체에 대한 참조를 하나 이상 찾으면 개체를 해제하지 않습니다. 그러나 가비지 수집기는 비관리 코드에서 개체에 대한 참조를 인식하지 못하며 명시적으로 차단하지 않는 한 비관리 코드에서만 사용되는 개체를 해제할 수 있습니다. 이 메서드는 KeepAlive 가비지 수집기가 관리되지 않는 코드에서 여전히 사용 중인 개체를 수집하지 못하도록 하는 메커니즘을 제공합니다.

관리되는 메모리 할당 외에도 가비지 수집기의 구현은 파일 핸들 또는 데이터베이스 연결 같은 개체가 보유한 리소스에 대한 정보를 기본. 형식의 인스턴스를 회수하기 전에 해제해야 하는 관리되지 않는 리소스를 형식에서 사용하는 경우 형식은 종료자를 구현할 수 있습니다.

대부분의 경우 종료자는 메서드를 재정의 Object.Finalize 하여 구현되지만 C# 또는 C++로 작성된 형식은 소멸자를 구현합니다. 이 형식은 컴파일러가 재정의 Object.Finalize로 바뀝니다. 대부분의 경우 개체에 종료자가 있는 경우 가비지 수집기는 개체를 해제하기 전에 호출합니다. 그러나 가비지 수집기는 모든 상황에서 종료자를 호출할 필요가 없습니다. 예를 들어 메서드는 SuppressFinalize 개체의 종료자가 호출되지 않도록 명시적으로 차단합니다. 또한 가비지 수집기는 특정 스레드를 사용하여 개체를 마무리하거나 서로를 참조하지만 가비지 수집에 사용할 수 있는 개체에 대해 종료자가 호출되는 순서를 보장할 필요가 없습니다.

특정 시간에 리소스를 해제해야 하는 시나리오에서 클래스는 리소스 관리 및 클린up 작업을 수행하는 메서드를 포함하는 IDisposable.Dispose 인터페이스를 구현 IDisposable 할 수 있습니다. 구현 Dispose 하는 클래스는 클래스 소비자가 메서드를 호출하여 개체를 클린 경우 클래스 계약의 일부로 지정해야 합니다. 가비지 수집기는 기본적으로 메서드를 Dispose 호출하지 않지만 메서드 구현은 클래스에서 DisposeGC 메서드를 호출하여 가비지 수집기의 종료 동작을 사용자 지정할 수 있습니다.

개체 종료 및 삭제 패턴에 대한 자세한 내용은 관리되지 않는 리소스 정리를 참조 하세요.

개체 노화 및 세대

공용 언어 런타임의 가비지 수집기는 세대를 사용하여 개체 에이징을 지원합니다. 세대는 메모리에 있는 개체의 상대 기간 측정 단위입니다. 개체의 생성 번호 또는 나이는 개체가 속한 세대를 나타냅니다. 만든 개체 자세한 최근에 최신 세대의 일부인 하며 애플리케이션 수명 동안의 앞부분에서 만든 개체 주기 보다 더 낮은 세대 번호입니다. 가장 최근 세대의 개체는 0세대에 있습니다. 가비지 수집기의 이 구현은 3세대 개체, 0세대, 1세대 및 2세대를 지원합니다. 속성 값을 MaxGeneration 검색하여 시스템에서 지원하는 최대 생성 수를 확인할 수 있습니다.

개체 에이징 가비지 수집기가 모든 세대를 평가 하는 것이 아니라 세대의 특정 집합에서 가비지 수집의 대상 애플리케이션을 있습니다. 매개 변수를 포함하는 메서드의 Collect 오버로드를 generation 사용하면 가비지 수집할 가장 오래된 세대를 지정할 수 있습니다.

가비지 수집 허용 불허

가비지 수집기는 가비지 수집이 앱의 성능에 부정적인 영향을 줄 수 있는 중요한 경로를 실행하는 동안 사용할 수 있는 GC 지역 대기 시간 모드를 지원하지 않습니다. GC 지역 대기 시간 모드가 없으면 가비지 수집기의 간섭 없이 할당할 수 있는 메모리 양을 지정해야 합니다. 런타임에서 해당 메모리를 할당할 수 있는 경우 런타임은 중요한 경로의 코드가 실행되는 동안 가비지 수집을 수행하지 않습니다.

의 오버로드 중 하나를 호출하여 GC 지역 없음의 위험 경로의 시작을 정의합니다 TryStartNoGCRegion. 메서드를 호출하여 해당 위험 경로의 끝을 지정합니다 EndNoGCRegion .

메서드에 대한 호출을 TryStartNoGCRegion 중첩할 수 없으며 런타임이 EndNoGCRegion 현재 GC 지역 대기 시간 모드가 없는 경우에만 메서드를 호출해야 합니다. 즉, 첫 번째 메서드 호출 후에는 후속 호출이 성공하지 못하므로 여러 번 호출 TryStartNoGCRegion 하면 안 되며 첫 번째 호출이 성공했다고 해서 호출 EndNoGCRegion 이 성공할 것으로 TryStartNoGCRegion 예상해서는 안 됩니다.