일부 (최소한 Mono 및 .NET) 가비지 수집기는 자주 스캔하는 단기 메모리 영역과 덜 자주 스캔하는 보조 메모리 영역을 가지고 있습니다. 모노는 이것을 보육원이라고 부릅니다.
어떤 객체를 폐기 할 수 있는지 알아 내기 위해 루트, 스택 및 레지스터에서 시작하여 모든 객체를 스캔하고 더 이상 참조되지 않는 모든 객체를 폐기합니다.
내 질문은 그들이 수집 할 때마다 사용중인 모든 메모리가 스캔되지 않도록하는 방법입니다. 원칙적으로 더 이상 사용하지 않는 개체를 찾는 유일한 방법은 모든 개체와 모든 참조를 스캔하는 것입니다. 그러나 이렇게하면 응용 프로그램에서 사용하지 않고 "Nursery Collection"에서도 수행해야하는 엄청난 양의 작업 인 것처럼 느껴지더라도 OS가 메모리를 스왑 아웃하지 못하게됩니다. 보육원을 사용하여 많은 돈을 받고있는 것 같지는 않습니다.
내가 누락되었거나 가비지 수집기가 실제로 모든 객체와 모든 참조를 수집 할 때마다 스캔합니까?