int 배열을 할당하고 GC.Collect()
을 호출 한 후 가비지 수집 여부를 확인하려는 프로그램이 있습니다. 이 프로그램에서는 int 배열 array1
을 할당하고 나중에 가비지 수집 여부를 확인하기 위해 WeakReference
을 유지합니다. 나는 (array2
) 새로운 로컬 배열을 할당하고 참조로 전달 된 temp
배열에 array2
을 할당하는 procedure
이라는 메서드를 가지고 있습니다. 이 방법은 또한 약한 참조 ref1
과 ref2
에 입력 temp
배열과 array2
에 대한 정보를 할당합니다. 이 메서드를 호출하면 array1
이 전달되므로 array1
이 array2
이됩니다. 이 메서드를 종료하면 가비지 수집을 강제로 GC.Collect()
호출합니다. 디버거는 ref1
과 ref2
이 여전히 IsAlive
속성이 true
과 같다고 말합니다. main
함수에서 인스턴스화되고 array1
을 참조하는 ref3
은 가비지 수집 후에 IsAlive
속성이 false
이라고 알려주기 때문에 array1
은 이미 가비지 수집되었습니다.동일한 객체에 대한 2 개의 약한 참조가 서로 다른 정보를 표시합니다.
, array1
를 참조하는,하지 ref1
할까요 마찬가지로 ref3
(도 array1
를 참조하는) 수행, false
에 IsAlive
특성과 동일 있나요?
static WeakReference ref1;
static WeakReference ref2;
static WeakReference ref3;
const int max_size = 10;
public static void procedure(ref int []temp)
{
int[] array2 = new int[max_size];
temp = array2;
for (int i = 0; i < max_size; i++)
array2[i] = i * 2;
ref1 = new WeakReference(temp);
ref2 = new WeakReference(array2);
}
static void Main(string[] args)
{
int []array1 = new int[max_size];
ref3 = new WeakReference(array1);
procedure(ref array1);
//array1 = null;
GC.Collect();
}
ref1 참조 array2. – krisdyson