2016-11-06 2 views
0

내가 이해하는 바와 같이, .NET GC 응용 프로그램에서 서버 GC 모드가 활성화되면 각 프로세서에서 예약 된 스레드가 메모리를 할당하는 프로세서 당 논리 힙을 할당합니다.작업 계속이 다른 프로세서 (GC 논리 힙)에서 예약되면 어떻게됩니까?

복수 대기로 Task에 할당 된 메모리는 어떻게됩니까? ThreadPool의 모든 스레드에서 잠재적으로 실행될 수 있으므로 논리 힙간에 이동할 수 있습니다.

이전 논리 힙에 할당 된 메모리가 현재 실행중인 논리 힙에 복사됩니까? 동일한 논리 힙/코어에서 Task 연속을 실행하지 않으면 어떤 비용이 있습니까?

+2

잘못된 정신 모델입니다. 객체는 이미 serverGC가없는 다른 힙 세그먼트에 있습니다. 즉, gen # 0에서 # 2 및 LOH. serverGC의 세그먼트가 더 이상 끊기지 않습니다. 더 생산적인 것은 하나 이상의 프로세서에서 쓰레기를 수집한다고 생각하는 것입니다. –

답변

2

여러 작업 대기열에 할당 된 메모리는 어떻게됩니까? ThreadPool의 모든 스레드에서 잠재적으로 실행될 수 있으므로 논리 힙간에 이동할 수 있습니다.

스레드는 논리적 구분에 관계없이 전체 주소 공간을 볼 수 있습니다. 힙 개체는 경계가없는 다른 힙의 다른 개체를 가리킬 수 있습니다. 다른 스레드는 동일한 CPU에서 다른 시간 조각으로 예약 할 수 있습니다.

이전 논리 힙에 할당 된 메모리가 현재 실행중인 논리 힙에 복사됩니까? 동일한 논리적 힙/코어에서 작업 계속을 실행하지 않는 데 드는 비용은 있습니까?

아니요. 따라서 런타임에서 개체간에 겹치는 개체를 강제로 복사해야하는 경우 런타임 성능이 크게 저하됩니다. 다시 말해 스레드를 할당 한 논리 힙에서 스레드가 실행되지 않는다고해서 해당 힙을 참조 할 수 없다는 것을 의미하지는 않습니다. 코어 당 힙 (heap)의 개념은 할당을 확장하고 병렬 gc 컬렉션을 구현할 수있게하는 것입니다.

+0

Yuval에게 대답 할 시간을내어 주셔서 감사합니다. 이것이 컬렉션 향상 방법에 대해 자세히 설명해 주시겠습니까? GC는 모든 스레드가 단일 논리 힙에 대한 콜렉션을 일시 중지해야합니까? – WiseGuyEh

관련 문제