필자가 기억 하듯이, 복사를 통한 추적은 포인터 참조의 지역성을 향상시키는 경향이 있기 때문에 복사 수집기는 페이징 친화적입니다. 이는 링크를 따라갈 때 페이지 폴트가 적게 발생하는 프로그램 (뮤 테이터)에 긍정적 인 영향을 미치며, 추적으로 인해 페이지 폴트가 줄어들 기 때문에 다음 콜렉션 주기도 개선됩니다. 추적 아젠다 (포인터를 먼저 처리해야 함)는 데이터 지역성을 향상시키는 효과에 영향을 줄 수 있습니다. 이것은 다른 유형의 셀에서 다른 포인터에 대한 액세스 수에 대한 통계를 측정하여 향상시킬 수 있습니다.
이제 일반적으로 추적 수집기를 고려할 경우 일반적으로 아직 추적되지 않은 포인터를 추적하는 구조를 유지해야합니다. 동일한 페이지를 가리키는 모든 대기 포인터가 함께 유지되도록이 구조를 구성하는 것이 가능할 수 있습니다 (물론 이러한 포인터 목록을 유지하는 사용 가능한 기술에 따라 더 많은 공간이 필요할 수 있음). 메모리의 페이지에 대기 포인터가 남아 있지 않은 경우 항상 동일한 정책을 가리키는 가장 큰 대기 포인터 세트를 먼저 추적하는 것이 가능한 정책입니다.
세 번째 단락의 질문에 대해, 답변 한 후에 추가 된 사본 수집은 다시 답변입니다. 페이지가 완전히 비워 지므로 OS는 수집시 할당 된 실제 페이지 수를 줄일 수 있습니다. 마크 앤 스윕 수집기를 사용하면 전체 페이지 꿀벌이 무료로 발생하는 이벤트는 훨씬 드물기 때문에 특정 메커니즘을 고려할 가치가 없습니다.
이런 종류의 아이디어는 자연스럽고 아마도 일부 논문에 설명되어있을 것입니다. 그러나 나는 그것을 손에 기억하지 않습니다. Lisp GC의 초기 논문에는 이러한 아이디어 중 일부가 포함되어 있다고 생각합니다 (예 : car 또는 cdr을 먼저 따라야합니까?).
이 사본 수집 역할의 좋은 소식은 페이징이 사용 가능한 저장 공간을 늘리기 때문에 복사 수집에 친숙하다는 것입니다. 카피 컬렉터는 원칙적으로 실제 데이터 스토리지에 사용되는 것보다 두 배의 공간을 필요로합니다. 이제 페이징의 효과는 머신의 주소 공간 및 사용 가능한 실제 메모리에 따라 다릅니다. 구형 컴퓨터에서 실제 메모리는 사용 가능한 주소 공간보다 훨씬 적으므로 페이징은 실제로 공간 보너스이므로 복사 GC와 같은 정책을 허용합니다. 물리적 공간이 주소 공간만큼 큰 경우에도 GC를 사용하는 프로세스가 페이징없이 더 적은 주소 공간을 갖도록 공유 할 수 있습니다 ( 페이징 참조). 이러한 발언은 세대 별 수집기 사용으로 다소 감독됩니다. 이들은 일반적으로 이러한 특성으로 인해 젊은 세대의 사본 수집을 정확하게 사용하며, 젊은 세대는 대부분 수명이 짧습니다.
그런 다음 이전 질문에서 논의 된 세대 GC와 캐시 시스템의 모든 상호 작용이 있습니다. 세대 가비지 수집기는 본질적으로 캐시 친화적입니까?
이 문제에 대한 자세한 내용을 보려면 키워드 가비지 수집 및 locality 와 같은 웹을 검색하십시오 .