108 votes

Quel type de Garbage Collection ne Go utilisation ?

Go est un langage de garbage collecté :

http://Golang.org/doc/go_faq.html#garbage_collection

Ici il est dit que c’est un éboueur mark-and-sweep, mais il n’est pas entrer dans les détails et un remplacement est en travaux... encore, ce paragraphe ne semble pas avoir été mis à jour beaucoup depuis Go a été libéré.

Il est encore mark-and-sweep ? Est-ce prudent ou précis ? C’est générationnel ?

114voto

Atom Points 8739

Des Plans pour Aller 1.4+ garbage collector:

  • hybride cessez-le-monde/simultanées collector
  • stop-the-world partie limitée par une date limite de 10 ms
  • Cœurs de PROCESSEUR dédié à l'exécution simultanée de collecteur
  • tri-couleur mark-and-sweep algorithme
  • non-générationnelle
  • non compactage
  • complètement précis
  • encourt un faible coût, si le programme est en mouvement autour de pointeurs
  • une latence plus faible, mais très probablement aussi plus faible débit, que d'Aller 1.3 GC

Aller 1.3 garbage collector mises à jour sur le sommet d'Aller 1.1:

  • simultanées de balayage (résultats dans les plus petits temps de pause)
  • complètement précis

Aller 1.1 garbage collector:

  • mark-and-sweep (parallèles de mise en œuvre)
  • non-générationnelle
  • non compactage
  • la plupart précis (à l'exception de la pile images)
  • cessez-le-monde
  • bitmap de représentation
  • à coût zéro lorsque le programme n'est pas de l'allocation de mémoire (qui est: brassage des pointeurs autour est aussi rapide qu'en C, bien que dans la pratique c'est un peu plus lent que C parce que le Go compilateur n'est pas aussi avancé que les compilateurs C comme GCC)
  • prend en charge les finaliseurs sur les objets
  • il n'y a pas de support pour les références faibles

Aller 1.0 garbage collector:

  • même que d'Aller 1.1, mais au lieu d'être principalement précise le garbage collector est conservateur. Le conservateur GC est capable d'ignorer les objets tels que []byte.

Remplacement de la GC avec un autre est sujet à controverse, par exemple:

  • sauf pour les très gros tas, il est difficile de savoir si une question de génération GC serait plus rapidement
  • package "dangereux", il est difficile de mettre en œuvre pleinement précise le GC et le compactage de la GC

19voto

berdario Points 490

Il s’agit de la mise en œuvre de gc et gccgo

http://code.google.com/p/Go/source/Browse/SRC/pkg/Runtime/mgc0.c

http://code.google.com/p/gofrontend/source/Browse/Libgo/Runtime/mgc0.c

Donc il semble être un arrêt du monde, mark-and-sweep garbage collector (et pas générationnelle)

2voto

jnml Points 21

Je ne sais pas, mais je pense que le courant (tip) de GC est déjà un parallèle ou au moins, c’est un WIP. Ainsi la propriété arrêt du monde ne s’appliquent plus ou va pas dans un avenir proche. Peut-être quelqu'un d’autre peut expliquer cela plus en détail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X