비압축 가비지 수집으로 인한 힙의 개체 레이아웃을 보고합니다.
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG
cObjectIDRangeLength[] );
매개 변수
cSurvivingObjectIDRanges
[in] 비압축 가비지 수집의 결과로 유지된 연속적 개체 블록의 수입니다. 즉, cSurvivingObjectIDRanges 값은 각 개체 블록의 ObjectID와 길이를 저장하는 objectIDRangeStart 및 cObjectIDRangeLength 배열의 크기입니다.SurvivingReferences의 다음 두 인수는 병렬 배열입니다. 즉, objectIDRangeStart와 cObjectIDRangeLength는 연속적 개체의 동일한 블록에 관련됩니다.
objectIDRangeStart
[in] 메모리에 있는 연속적 활성 개체 블록의 시작 주소를 나타내는 각 ObjectID 값의 배열입니다.cObjectIDRangeLength
[in] 메모리에 유지된 연속적 개체 블록의 크기를 나타내는 각 정수의 배열입니다.크기는 objectIDRangeStart 배열에서 참조되는 각 블록에 대해 지정됩니다.
설명
개체가 가비지 수집되지 않고 유지되었는지 여부를 확인하려면 objectIDRangeStart 및 cObjectIDRangeLength 배열의 요소를 다음과 같이 해석해야 합니다. ObjectID 값(ObjectID)이 다음 범위 내에 있다고 가정합니다.
ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]
임의의 i 값이 다음 범위에 있으면 개체는 가비지 수집되지 않고 유지된 것입니다.
0 <= i < cSurvivingObjectIDRanges
비압축 가비지 수집은 "비활성" 개체에서 사용한 메모리를 회수하지만 확보된 해당 공간을 압축하지는 않습니다. 따라서 메모리가 힙에 반환되지만 "활성" 개체가 이동되지는 않습니다.
CLR(공용 언어 런타임)에서는 비압축 가비지 수집을 위해 SurvivingReferences를 호출합니다. 압축 가비지 수집의 경우에는 대신 ICorProfilerCallback::MovedReferences가 호출됩니다. 단일 가비지 수집이 한 세대에 대해서는 압축 방식이고 다른 세대에 대해서는 비압축 방식일 수 있습니다. 특정 세대에 대한 가비지 수집의 경우 프로파일러에서는 SurvivingReferences 콜백 또는 MovedReferences 콜백 중 하나를 받거나 둘 다 받지 않습니다.
내부 버퍼가 제한되거나 서버 가비지 수집 시 여러 스레드에서 보고하거나 그 밖의 여러 가지 이유로 특정 가비지 수집 동안 여러 개의 SurvivingReferences 콜백을 받을 수 있습니다. 가비지 수집 동안 여러 개의 콜백을 받으면 정보가 누적되므로 SurvivingReferences 콜백에서 보고된 모든 참조가 가비지 수집되지 않고 유지됩니다.
요구 사항
플랫폼: .NET Framework 시스템 요구 사항 참조
헤더: CorProf.idl, CorProf.h
라이브러리: CorGuids.lib
.NET Framework 버전: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0