2012-06-20 2 views
0

가비지 수집에 대해 읽었지만, 모든 설명은 이미 힙 (heap)을 구현하여 개체를 할당하고 기억하고 있다고 가정합니다.메모리 힙 데이터 구조는 GC에 적합합니까?

관리 된 힙에 대한 성서를 찾기가 어렵습니다. 누군가 알고리즘, 데이터 구조 및 기타 리소스를 몇 가지 언급 할 수 있습니까?

+0

사용 된 리소스에 대한 링크는 무엇입니까? 프로그래머 .SE? – sehe

+0

@sehe "사용 된 리소스에 대한 링크"는 무엇을 의미합니까? 이 링크 나 도서 목록으로 만들지 마십시오. 나는 답안에 어떤 가능성이 존재하는지에 대한 훌륭하고 일반적인 개관을 원한다. –

+1

나는 sehe가 당신이 이미 발견 한 자원과 그것이 부족한 이유를 알고 싶어한다고 생각합니다. –

답변

0

힙의 관리가 실제 가비지 수집 알고리즘과 상당히 밀접하게 관련되어 있으므로 여기 언급 한 내용이 설명하지 않은 것이 조금 놀랍습니다. 힙이 어떻게 관리되는지. 읽은 설명을 가리킬 수 있다면 도움이 될 것입니다.

질문의 루트는 메모리 관리자가 실제로 할당 된 모든 개체를 추적하여 더 이상 참조되지 않는 개체를 찾는 방법 일 수 있다고 생각합니다. 이를 수행하는 가장 쉬운 방법은 할당 된 객체의 링크 된 목록을 사용하는 것입니다. 목록의 다음 객체에 대한 포인터를위한 추가 공간이 각 객체에 할당됩니다.

가비지 수집되지 않은 메모리 관리자는 일반적으로 해제 된 개체 목록도 유지하지만 가비지 수집 메모리 관리자는 특정 개체를 가리키는 참조를 모두 식별 할 수 있으므로이를 피할 수 있습니다. 객체를 사용하여 메모리 내에서 객체를 이동시켜 메모리를 압축 할 수 있습니다. 따라서 항상 사용 가능한 여유 메모리 블록이 항상 있고 여유 메모리의 시작 부분에 기본 포인터 만 유지한다고 가정 할 수 있습니다.

This article은 .NET에서 메모리 관리의 일반적인 원칙을 설명하는 유용한 시작점입니다.