2010-12-07 4 views
1

복사 가비지 수집기는 메모리 조각화를 어떻게 피합니까? 또한 힙 공간 사용에 어떤 영향이 있습니까?가비지 수집기 복사

내 가청 가비지 수집기는 모든 도달 가능한 개체를 힙에서 힙의 다른 섹션으로 복사합니다. 뒤에 남겨진 모든 객체는 더 이상 필요 없으며 따라서 제거됩니다.

이것이 올바른 이해 인 경우 어떻게 메모리 조각화를 피할 수 있습니까?

이 프로세스는 복사 한 모든 항목의 중복을 갖기 때문에 많은 힙 공간을 사용해야합니다.

+0

위키에는 몇 가지 장점과 단점이 있습니다. http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)#Moving_vs._non-moving – delnan

답변

2

이것이 올바른 이해 인 경우 어떻게 메모리 조각화를 피할 수 있습니까?

개체를 "새 힙"에 복사 할 때 간격을 두지 않고 개체를 서로 바로 붙여야하기 때문입니다.

이 프로세스는 복사 한 모든 항목의 중복을 갖기 때문에 많은 힙 공간을 사용해야합니다. 맞습니까?

수집 프로세스 중에 만. 그렇게하면 모든 "원본"이 할당 해제되고 그 공간이 다시 해제됩니다.

또한 이와 같은 가비지 수집기는 "generational"입니다. 복사 가비지 수집은 수명이 짧은 개체에 사용되며 수명이 긴 개체는 다르게 처리됩니다. 이렇게하면 공간 문제를 줄이는 데 도움이 될뿐만 아니라 컬렉션 시간을 단축 할 수 있습니다.

1

기본 이해가 정확합니다. 도달 가능한 객체를 복사 할 때 하나의 블록에 여유 공간을 남겨두면 조각을 피할 수 있습니다. 실제로 많은 공간이 필요합니다. 실제로 공간의 2 배와 부기에 대한 약간의 변경이 필요합니다.

1

메모리 조각화는 두 개의 활성 청크 사이에서 메모리 덩어리가 할당 해제 될 때 발생합니다. 메모리 블록을 이렇게 생각해보십시오.

AAAAAAAAAAAAAAAABBBBCCCCCCCCCCCC 

B가 더 이상 필요하지 않다고 가정합니다. 우리는 이제 B는 우리가 같은 것을 가지고 사용하던 공간 ...

AAAAAAAAAAAAAAAA----CCCCCCCCCCC 

을 확보하면 우리는 오히려 작은 물체를 넣을 수 차이가 있습니다. 있도록 복사 가비지 수집기가 주위에 물건을 움직일 수있는 우리

AAAAAAAAAAAAAAAACCCCCCCCCCC---- (more free space here)

대부분의 현대 수집가 자리에서 물건을 이동할 수 있습니다 ... 있습니다. 즉, C가 "이전"되어 B의 이전 공간을 차지할 수 있다는 것을 알 수 있으며 따라서 메모리 오버 헤드가 없습니다.

관련 문제