Si je me souviens bien, les collecteurs de copie sont censés être compatibles avec la pagination, car le traçage par copie a tendance à améliorer la localisation des références de pointeur. Cela a un effet positif sur le programme (mutateur) qui causera moins de défauts de page lors du suivi des liens, et améliorera également le prochain cycle de collecte car le traçage provoquera également moins de défauts de page. Le programme de suivi (quels pointeurs doivent être traités en premier) peut avoir un impact sur l'efficacité de l'amélioration de la localisation des données. Cela peut être amélioré en mesurant les statistiques sur le nombre d'accès à différents pointeurs dans différents types de cellules.
Maintenant, si vous envisagez un collecteur de traçage en général, vous devez généralement conserver une structure qui conserve la trace des pointeurs qui n'ont pas encore été tracés. Il peut être possible d'organiser cette structure afin que tous les pointeurs en attente pointant sur la même page soient conservés ensemble (bien que cela puisse prendre plus de place, dans certains cas, selon les techniques disponibles pour conserver la liste de ces pointeurs). Une stratégie possible consiste alors à toujours tracer d'abord le plus grand ensemble de pointeurs en attente pointant vers la même page, lorsqu'il n'y a plus de pointeur en attente vers les pages en mémoire.
En ce qui concerne la question du troisième paragraphe, qui a été ajoutée après que j'ai répondu, la collecte de copies est à nouveau une réponse. Le système d'exploitation peut réduire le nombre de pages physiques allouées au moment de la collecte, car les pages sont entièrement libérées. Avec un collecteur de marques et de balayages, l'événement d'une page entière gratuite est probablement beaucoup plus rare, ne valant donc pas un machanisme spécifique à prendre en compte.
Ce genre d'idées est naturel et est probablement décrit dans certains articles. Mais je ne m'en souviens pas tout de suite. Je pense que les premiers articles sur Lisp GC contiennent certaines de ces idées (telles que: voiture ou cdr doit-il être suivi en premier?).
La bonne nouvelle dans ce rôle de copie-collection est également que la pagination est conviviale pour copier la collection car elle augmente l'espace de stockage disponible. Rappelons que le collecteur de copie nécessite en principe deux fois plus d'espace que celui utilisé pour le stockage réel des données. Désormais, l'effet de la pagination dépend également de l'espace d'adressage de la machine et de la mémoire physique disponible. Dans les ordinateurs plus anciens, la mémoire physique était bien inférieure à l'espace d'adressage disponible, de sorte que la pagination était vraiment un bonus d'espace, permettant des politiques telles que la copie du GC. Même lorsque l'espace physique est aussi grand que l'espace d'adressage, on peut vouloir le partager, de sorte que le processus utilisant un GC ait moins d'espace d'adressage sans pagination (voir pagination). Ces remarques sont quelque peu dépassées par l'utilisation de collecteurs générationnels. Ils utilisent généralement la collection de copies pour la jeune génération précisément en raison de ces qualités et parce que la jeune génération est généralement de courte durée.
Ensuite, vous avez toutes les interactions du GC générationnel avec le système de cache, qui ont été discutées dans une question précédente: les récupérateurs de génération sont - ils intrinsèquement compatibles avec le cache?
Pour plus d'informations sur ces problèmes, je rechercherais sur le Web avec, par exemple, les mots clés garbage collection et locality .