GC(백그라운드 가비지 수집)에서는 2세대의 수집이 진행되는 동안 필요에 따라 임시 세대(0 및 1)가 수집됩니다. 백그라운드 가비지 수집은 워크스테이션인지 서버 GC인지에 따라 하나 이상의 전용 스레드에서 수행되며 2세대 컬렉션에만 적용됩니다.
백그라운드 가비지 수집은 기본적으로 사용하도록 설정됩니다. .NET Framework 앱의 gcConcurrent 구성 설정 또는 .NET Core 및 .NET 5 이상 앱 의 System.GC.Concurrent 설정을 사용하여 사용하도록 설정하거나 사용하지 않도록 설정할 수 있습니다.
비고
백그라운드 가비지 수집은 동시 가비지 수집 을 대체하며 .NET Framework 4 이상 버전에서 사용할 수 있습니다. .NET Framework 4에서는 워크스테이션 가비지 수집에 대해서만 지원됩니다. .NET Framework 4.5부터 워크스테이션 및 서버 가비지 수집 모두에 백그라운드 가비지 수집을 사용할 수 있습니다.
백그라운드 가비지 수집 중 임시 세대에 대한 컬렉션을 포그라운드 가비지 수집이라고 합니다. 포어그라운드 가비지 컬렉션이 발생하면 모든 관리되는 스레드가 일시 중단됩니다.
백그라운드 가비지 수집이 진행 중이고 0세대에 충분한 개체를 할당한 경우 CLR은 0세대 또는 1세대 포그라운드 가비지 수집을 수행합니다. 전용 백그라운드 가비지 수집 스레드는 자주 안전한 지점에서 검사하여 포그라운드 가비지 수집에 대한 요청이 있는지 확인합니다. 있는 경우 백그라운드 컬렉션은 포그라운드 가비지 수집이 발생할 수 있도록 자체를 일시 중단합니다. 포그라운드 가비지 수집이 완료되면 전용 백그라운드 가비지 수집 스레드 및 사용자 스레드가 다시 시작됩니다.
백그라운드 가비지 수집은 백그라운드 가비지 수집 중에 임시 가비지 수집이 발생할 수 있으므로 동시 가비지 수집에 의해 적용되는 할당 제한을 제거합니다. 백그라운드 가비지 수집은 임시 세대에서 데드 개체를 제거할 수 있습니다. 또한 1세대 가비지 수집 중에 필요한 경우 힙을 확장할 수 있습니다.
백그라운드 워크스테이션 대 서버 GC
.NET Framework 4.5부터 서버 GC에 백그라운드 가비지 수집을 사용할 수 있습니다. 백그라운드 GC는 서버 가비지 수집의 기본 모드입니다.
백그라운드 서버 가비지 수집은 백그라운드 워크스테이션 가비지 수집과 유사하게 작동하지만 몇 가지 차이점이 있습니다.
백그라운드 워크스테이션 가비지 수집은 하나의 전용 백그라운드 가비지 수집 스레드를 사용하는 반면 백그라운드 서버 가비지 수집은 여러 스레드를 사용합니다. 일반적으로 각 논리 프로세서에 대한 전용 스레드가 있습니다.
워크스테이션의 백그라운드 가비지 수집(GC) 스레드와 달리, 백그라운드 서버 GC 스레드는 시간 초과로 종료되지 않습니다.
다음 그림에서는 별도의 전용 스레드에서 수행되는 백그라운드 워크스테이션 가비지 수집을 보여 줍니다.
다음 그림에서는 별도의 전용 스레드에서 수행되는 백그라운드 서버 가비지 수집을 보여 줍니다.
동시 가비지 수집
팁 (조언)
이 섹션은 다음에 적용됩니다.
- 워크스테이션 가비지 수집을 위한 .NET Framework 3.5 및 이전 버전
- 서버 가비지 수집용 .NET Framework 4 이하
이후 버전에서는 동시 가비지가 백그라운드 가비지 수집으로 대체됩니다.
워크스테이션 또는 서버 가비지 수집에서 동시 가비지 수집을 사용하도록 설정하면 스레드가 컬렉션의 대부분의 기간 동안 가비지 수집을 수행하는 전용 스레드와 동시에 실행될 수 있습니다. 이 옵션은 2세대의 가비지 수집에만 영향을 줍니다. 0세대와 1세대는 빠르게 완료되므로 항상 비동기입니다.
동시 가비지 수집을 사용하면 컬렉션에 대한 일시 중지를 최소화하여 대화형 애플리케이션의 응답성이 높아질 수 있습니다. 관리되는 스레드는 동시 가비지 수집 스레드가 실행되는 동안 대부분의 시간을 계속 실행할 수 있습니다. 이 설계는 가비지 수집이 진행되는 동안 일시 중지를 짧게 만듭니다.
동시 가비지 수집은 전용 스레드에서 수행됩니다. 기본적으로 CLR은 단일 프로세서 및 다중 프로세서 컴퓨터 모두에서 동시 가비지 수집을 사용하도록 설정된 워크스테이션 가비지 수집을 실행합니다.
다음 그림에서는 별도의 전용 스레드에서 수행되는 동시 가비지 수집을 보여 줍니다.
참고하십시오
.NET