Sobes.tech
Middle

Parlez-moi des méthodes de collecte des déchets (Garbage Collector).

sobes.tech IA

Réponse de l'IA

Méthodes de collecte des déchets :

  • Comptage de références (Reference Counting) : Chaque objet conserve un compteur de références. Lorsqu'il atteint zéro, l'objet est considéré comme déchet et supprimé.
    • Avantages : Simple, ne bloque pas longtemps l'exécution principale.
    • Inconvénients : Ne gère pas les références cycliques ; nécessite un espace supplémentaire pour le compteur dans chaque objet.
  • Collecteurs de déchets de traçage (Tracing Garbage Collectors) : Commencent avec un ensemble d'objets "racine" (par exemple, variables actives, pile d'appels) et parcourent récursivement tous les objets accessibles depuis ces racines. Les objets inaccessibles sont considérés comme déchet.
    • Stratégies principales de traçage :
      • Marquer et balayer (Mark and Sweep) :
        1. Marquer (Mark) : Parcours du graphe d'objets, marquant tous les objets accessibles.
        2. Balayer (Sweep) : Deuxième passage en mémoire, supprimant tous les objets non marqués.
        • Inconvénients : Fragmentation de la mémoire.
      • Marquer et compacter (Mark and Compact) :
        1. Marquer (Mark) : Comme dans Mark and Sweep.
        2. Compacter (Compact) : Déplace les objets vivants pour qu'ils soient contigus, éliminant la fragmentation.
        • Inconvénients : Plus complexe, peut nécessiter l'arrêt de l'exécution du programme.
      • Copie (Copying) : Divise la mémoire en deux zones (semi-espaces). À chaque cycle de collecte, les objets vivants d'une zone sont copiés dans l'autre. Ensuite, l'ancienne zone est complètement nettoyée.
        • Avantages : Absence de fragmentation, allocation rapide de mémoire après la collecte.
        • Inconvénients : Nécessite deux fois plus de mémoire que la mémoire active.
  • Collecte de déchets générationnelle (Generational Garbage Collection) : Basée sur l'hypothèse que la plupart des objets ne vivent pas longtemps. La mémoire est divisée en générations (jeune, vieille). Les objets sont placés dans la génération jeune lors de leur création. Si un objet survit à plusieurs collectes dans la génération jeune, il est déplacé dans la génération vieille. La collecte a lieu plus fréquemment dans la génération jeune.
    • Avantages : Efficace, car la majorité du travail est effectuée dans la génération jeune avec peu de données.
    • Inconvénients : Nécessite de suivre les références des anciennes générations vers les jeunes (cartes d'enregistrement ou autres mécanismes).

Exemples de langages et leurs GC :

  • Python : Comptage de références (avec collecte cyclique pour les références cycliques).
  • Java, C# : Générationnel, Marquer et balayer, Marquer et compacter, Copie (différentes options et combinaisons selon la version et la configuration JVM/.NET).
  • Go : Concurrent, non générationnel, Marquer et balayer avec optimisations.