Je lis je lis "Strike Dynamic Langues Strike Retour " Talk et, il critique des GC de marque et de balayage (environ 5 à 10% à travers ce lien, la diapositive" des porcs de voler ") Qu'est-ce qui ne va pas avec eux? P>
3 Réponses :
Il contraste à Mark-Compact : P>
Les collectionneurs de déchets générationnels sont la meilleure réponse que j'ai pour cela, car elle réduit les pauses, et franchement, les collectionneurs à ordures pour toutes les [nouvelles] langues dynamiques aujourd'hui sont de la merde. Ils sont marquants et balayer, ou ils font référence comptés. P> blockQuote>
Marque de plaine et gcs de balayage ne sont pas si bons car ils ont un problème de fragmentation de tas. Avec des niveaux d'allocation élevés communs des langages activés par GC, cela devient généralement un problème plus rapide que par ex. C ++, où beaucoup d'objets vivent simplement sur la pile. P>
Cela dit, Mark-compact est vraiment marqué et balayer avec le compactage abordé dessus, de sorte que la terminologie pourrait être meilleure. Les collecteurs non compacts sont normalement appelés "conservateurs" pour les distinguer. P>
En fait, je considérerais "marquer et balayer", "Mark and Compact", et "Copier et compact" pour être trois approches différentes, bien que le terme "marquage et balayage" soit utilisé pour décrire le GC de .NET même si - à l'extérieur Le grand tas d'objets - je pense que c'est vraiment "copier et compact". Je décrirais le fonctionnement de "copie et compacte" comme équivalent à prendre tout ce qui est utile d'un bâtiment, puis de le dynamiser et de la constituer un nouveau. Dans un système dans lequel des objets sont accessibles via des poignées (alors déplacer un objet ne nécessite que de mettre à jour un pointeur) ...
... Ajout à chaque objet de tas Une copie de sa poignée permettrait une mise en œuvre marquée et compacte de compacter le tas "en place". Une telle approche ne fonctionne pas avec la "copie et compacte", mais cette dernière approche a l'avantage de ne pas avoir à passer du temps à parcourir une liste d'objets morts; On ignore simplement tout ce que l'on n'a pas copié.
Voici le contexte de la citation: p>
Les collectionneurs de déchets générationnels sont le meilleure réponse que j'ai pour cela, parce que il réduit les pauses et franchement, les collectionneurs à ordures pour tous les [nouvelles] langues dynamiques aujourd'hui sont merde. Ils sont marquants et balayant, ou ils font référence comptés. p> blockQuote>
De la citation, il semble parler de GC relativement primitive qui ne sont pas générationnelles. Les GC générationnelles peuvent toujours être marquez et balayer, mais ils ont beaucoup moins à marquer la plupart du temps, ce qui les rend beaucoup plus rapidement que «Mark et balayer le monde à chaque fois». P>
En supposant que c'est ce qu'il voulait dire, je suis d'accord - mais il aurait pu le dire plus clairement. N'oubliez pas que c'était une conversation plutôt qu'une thèse de doctorat, cependant - à venir avec le moyen le plus clair possible de s'exprimer "sur le sabot" est un peu délicat :) p>
(Il convient de noter que Steve Yegge's Talk a été présenté il y a longtemps maintenant, et que certaines des généralisations qu'il fabriquent sur les langues dynamiques et leurs implémentations sont obsolètes. Et contrairement, impliquant ce génération La collecte des ordures est la solution aux pauses de GC, c'est ... optimiste. Surtout lorsque vous envisagez le type de caractéristiques en temps réel exigé par les joueurs.) sup> p>
Voici une comparaison de point de balle de haut niveau des différentes techniques mentionnées dans la citation référencée (plus "Mark-and-compact" ... qui est une variation de marquage et de balayage.) p>
Les propriétés de la collection de comptage de référence sont les suivantes: p>
pour la marque classique et le balayage: p>
Marque et balayage classique est parfois modifié de sorte que la phase de balayage compacte l'espace libre par des objets non-déchets "coulissants". Ceci s'appelle "Mark-Balay-Compact". Ceci est assez compliqué mais: p>
Les collectionneurs modernes (y compris les collecteurs de génération typiques) sont basés sur la marque et la copie. L'idée est que le collecteur trace des objets dans un "de l'espace" les copiant à un "à l'espace". Lorsque cela se fait, le "à l'espace" a un morceau contigu d'espace libre à la fin qui peut être utilisé pour allouer de nouveaux objets. L'ancien "de l'espace" est mis d'un côté pendant la prochaine fois que le collecteur des ordures est exécuté. La bonne chose à propos de la collecte de copier est que le coût de la collecte des ordures associée à un objet à ordures est proche de zéro. P>
Un collecteur de génération est celui où il existe plusieurs espaces (générations), qui sont collectés à des tarifs différents. Ceci est basé sur l'hypothèse "faible générationnelle" qui pose que la plupart des objets deviennent rapidement inaccessibles; C'est-à-dire qu'ils meurent jeunes. Donc, à la poubelle, collectionner l'espace contenant les jeunes objets, vous récupérez une quantité relativement importante d'espace à un coût relativement faible. Vous devez toujours collecter les générations plus âgées, mais cela peut arriver moins fréquemment. P>
(un collecteur de marquage et de balayage pourrait être générationnel, mais le remboursement n'est pas aussi génial que pour un collecteur de copie.) P>
Juste hors de curiosité, pouvez-vous élaborer un peu plus sur ce que le marque code> est?
"Les collectionneurs modernes (y compris les collectionneurs de génération typiques) sont basés sur la marque et la copie. L'idée est que le collecteur trace des objets dans un" de l'espace "les copiant à un" à l'espace ". Quand cela se fait, le" à l'espace "A une partie contiguë d'espace libre à la fin, qui peut être utilisée pour allouer de nouveaux objets. L'ancien" de l'espace "est mis d'un côté pendant la prochaine fois que le collectionneur des ordures s'exécute. La bonne chose à propos de la collecte de copier est que les ordures Les coûts de collecte associés à un objet à ordures sont proches de zéro. "
Que voulez-vous savoir d'autre?
Mes excuses pour manquer le contexte. Je viens de trouver la page Wikipedia et je suis un peu confus car la terminologie utilisée ici quelque peu diffère de celle-ci. Quand j'ai vu la phrase pour la première fois la phrase "les collectionneurs modernes (y compris les collecteurs de génération typiques) sont basés sur Mark-and-Copy." Code>, je pensais que Mark-and-Copy code> est un autre stratégie différente du balayage-compact-compact code>.
Quelle est la différence significative entre marquage-balayage-compact (l'approche coulissante) code> et marquage-et-copie code>?
Après avoir cherché autour de vous, je suis terminé avec une conclusion que Mark-and-Copy Copy> est en fait l'une des stratégies de mise en œuvre pour marquage-balayage-compact (mobile) code>.
La grande différence entre Mark-Copy et Mark-Balay-Compact est que les anciens copies dans un espace séparé et que ces derniers se déplacent dans une partie différente du même espace. Cela affecte considérablement la mise en œuvre; par exemple. Utilisation de l'ancien espace pour contenir des pointeurs de transfert. Dans le cas générationnel, les espaces peuvent également servir à désigner différentes générations.
Oh super. "Steve Yegge frappe."