2014-09-18 2 views
1

가비지 콜렉터가 사용하지 않는 오브젝트에서 메모리를 정리합니다.가비지 콜렉션 매개 변수

제 질문은이 객체가 사용되지 않았는지 여부를 정의하는 매개 변수는 무엇입니까?

+0

없습니다. 그러나 GC가 ['GC.KeepAlive']와 같은 것을 사용하여 객체를 처리하는 방법에 영향을 줄 수 있습니다 (http://stackoverflow.com/questions/7295195/how-to-use-gc-keepalive-and-for-what-purpose) 또는 C# ['fixed'] (http://msdn.microsoft.com/ko-us/library/vstudio/f58wzh21 % 28v = vs.110 % 29.aspx) 문을 사용하십시오. 두 가지 모두 실제 컬렉션이 수행되는 것을 막지는 않지만 특정 동작을 변경하는 것입니다 (자세한 내용은 링크를 참조하십시오). –

답변

2

오브젝트 포인터의 값은 0 => 개체

1

가비지 콜렉션의 두 가지 형태의 마크 & 스윕, 또는 참조 카운팅되어 미사용 (도달)이다.

대부분의 현대 언어는 여러 가지 방법의 조합 또는 변형을 사용합니다. 이것은 각 계획의 일반적인 개념을 다룰 것입니다.

또한 탈출 분석은 "쓰레기"의 양을 "줄이기"위해 사용됩니다.

이 "표시"부울 하나의 매개 변수으로, 모든 오브젝트를함으로써 작동

Mark & Sweep

.

  1. 메모리 공간 내의 모든 객체를 "거짓"으로 표시하는 것으로 시작합니다.
  2. 상위 "글로벌"개체에서 시작하여 해당 하위 개체에 대해 "true"로 표시합니다.
  3. 각 하위에 대해이를 "true"로 표시합니다. 원래 "false"였던 각 하위 클래스에 대해이 단계를 반복하십시오. (재귀)
  4. 마지막으로 "false"로 모든 개체를 삭제하십시오. (아마도 나중에) 이후 1의 과정을 반복
이는 정수와 함께 "부모 참조"매개 변수을의 양을 계산하고 객체를 삭제하는 개념에서 작동

Reference Counting

때 그것의 조사는 0에 도달한다.

  1. 오브젝트/var가 작성되어 전역/기타 오브젝트에 추가 될 때. 참조 카운트는 1 씩 증가합니다.
  2. 오브젝트/var가 전역/상위 오브젝트에서 제거되면. 참조 카운트가 1 씩 감소합니다.
  3. 제거 후 객체 참조 횟수가 0 인 경우 아무도

Escape Analysis

이 실행 코드를 분석하여, 쓰레기의 양을 "감소"하는 데 사용되는 추가 방법 "는 소유하지 않습니다"으로는 "쓰레기 수집"입니다. 임시 변수의 경우 함수 실행 후 "영구"이되지 않습니다. 그런 다음이 객체/변수는 함수 실행 후 즉시 지워집니다. 가비지 수집 시스템에 개체를 추가 할 필요가 없습니다 (오버 헤드가 있음). 이 단계는 많은 현대 언어의 성능을 보장하는 데 중요합니다.

Detailed advantages/disadvantages of Mark & Sweep/Reference Counting can be found on wiki