8
votes

Quel est le problème avec Mark-and-Sweep GCS?

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?


1 commentaires

Oh super. "Steve Yegge frappe."


3 Réponses :


5
votes

Il contraste à Mark-Compact :

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.

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.

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.


2 commentaires

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é.



10
votes

Voici le contexte de la citation:

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.

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».

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 :)


0 commentaires

32
votes

(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.)

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.)

Les propriétés de la collection de comptage de référence sont les suivantes:

  • Pro - La poubelle est récupérée immédiatement (en dehors des cycles)
  • PRO - La collecte des ordures Les pauses sont plus petites et minimales si vous pouvez différer la mise à jour de la structure de données "espace libre".
  • Les comptes de référence doivent être ajustés sur la plupart des opérations d'écriture de pointeur
  • L'espace libre n'est jamais compacté
  • Con - car l'espace libre n'est pas compacté, une structure de données "espace libre" doit être maintenue qui augmente les coûts d'allocation et de répartition.
  • Les déchets con - cycliques ne sont pas collectés, à moins que l'application ne casse le cycle à la main.
  • Con - mettre à jour les comptes de référence dans une application multi-threadé est très coûteux.

    pour la marque classique et le balayage:

    • Pro - Aucun pointeur écriture sur le dessus de l'écriture
    • Les données pro - cycliques sont collectées
    • Les goulots d'étranglement de la gestion de la gestion de la gestion de stockage peuvent être évités (à part GC)
    • Collection ordures sur l'arrêt-stop-the-world
    • L'espace libre n'est jamais compacté
    • Con - car l'espace libre n'est pas compacté, une structure de données "espace libre" doit être maintenue qui augmente les coûts d'allocation et de répartition.

      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:

      • Pro - Aucun pointeur écriture sur le dessus de l'écriture
      • Les données pro - cycliques sont collectées
      • Les goulots d'étranglement de la gestion de la gestion des stockages peuvent être facilement évités (en dehors de GC)
      • Collection ordures sur l'arrêt-stop-the-world
      • L'espace libre est compacté, la répartition est donc bon marché
      • Con - la phase compacte est plutôt chère

        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.

        • Pointeur Écriture des frais généraux (pour enregistrer lorsqu'un pointeur de "nouvelle génération" est écrit dans un objet "Old Generation")
        • Les données pro - cycliques sont collectées
        • Les goulots d'étranglement de la gestion de la gestion des stockages peuvent être facilement évités (en dehors de GC)
        • Collection de déchets con cité-monde, bien que cela puisse être atténué au coût de certains frais généraux d'exécution
        • Pro - Avec des collecteurs généraux, vous avez généralement une partie du tas avec beaucoup de déchets, et donc des frais généraux de GC sont moins en moyenne
        • PRO - Petites pauses de GC (la plupart du temps)
        • L'espace libre est compacté, la répartition est donc bon marché
        • pro - compactage vient plus à moindre coût qu'avec un compacteur coulissant
        • Con - vous devez réserver un espace d'objet supplémentaire pour le collecteur.

          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.

          (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.)


7 commentaires

Juste hors de curiosité, pouvez-vous élaborer un peu plus sur ce que le marque 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." , je pensais que Mark-and-Copy est un autre stratégie différente du balayage-compact-compact .


Quelle est la différence significative entre marquage-balayage-compact (l'approche coulissante) et marquage-et-copie ?


Après avoir cherché autour de vous, je suis terminé avec une conclusion que Mark-and-Copy est en fait l'une des stratégies de mise en œuvre pour marquage-balayage-compact (mobile) .


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.