Collecte des déchets et gestion de la mémoire
La gestion de la mémoire régit la manière dont les programmes allouent et récupèrent la mémoire ; la collecte des déchets automatise cette récupération en identifiant et en libérant les objets qui ne sont plus accessibles.
Definition
La gestion de la mémoire est l'allocation et la récupération de la mémoire d'un programme ; la collecte des déchets est une récupération automatique qui libère la mémoire occupée par des objets que le programme ne peut plus atteindre, épargnant ainsi au programmeur la désallocation explicite.
Scope
Ce sujet couvre la gestion automatique et manuelle de la mémoire pour les environnements d'exécution de langages : le comptage de références, le marquage-balayage (mark-and-sweep), la copie (copying) et la collecte générationnelle ; le traçage de l'accessibilité ; et les compromis entre le débit, le temps de pause et la surcharge mémoire. Il aborde les collecteurs concurrents et incrémentaux, ainsi que la relation entre la stratégie de collecte et la conception du langage.
Core questions
- Comment un collecteur détermine-t-il quels objets sont encore nécessaires ?
- Quels sont les compromis entre le débit, la latence et l'empreinte mémoire ?
- Pourquoi la séparation des objets par âge (collecte générationnelle) améliore-t-elle l'efficacité ?
- Comment la collecte peut-elle éviter de longues pauses dans les systèmes interactifs ou en temps réel ?
Key theories
- Collecte des déchets par traçage
- McCarthy a introduit la collecte automatique des déchets pour Lisp, établissant l'idée de récupérer la mémoire en traçant les objets qui restent accessibles à partir des racines du programme.
- Collecte générationnelle
- Lieberman et Hewitt ont observé que la plupart des objets ont une courte durée de vie et ont proposé de collecter les générations plus jeunes plus fréquemment, réduisant considérablement le coût de la collecte en pratique (l'hypothèse générationnelle).
- Taxonomie des techniques de collecte
- Wilson et le Garbage Collection Handbook organisent l'espace de conception des collecteurs par comptage de références, marquage-balayage, copie, incrémentaux et concurrents, ainsi que leurs compromis de performance.
Clinical relevance
La gestion automatique de la mémoire élimine des catégories entières de bogues, tels que les pointeurs pendants (dangling pointers) et les fuites de mémoire (memory leaks), raison pour laquelle la plupart des langages de haut niveau s'appuient sur la collecte des déchets. Le choix du collecteur affecte fortement la latence et le débit des applications, en particulier pour les systèmes interactifs et les serveurs.
History
McCarthy a introduit la collecte des déchets avec Lisp en 1960. La collecte par copie (Cheney) et le comptage de références ont suivi, et le collecteur générationnel de Lieberman et Hewitt en 1983 a exploité la durée de vie des objets. Les décennies suivantes ont vu l'apparition de collecteurs incrémentaux, concurrents et basés sur des régions, exhaustivement examinés dans l'ouvrage de Wilson de 1992 et le Garbage Collection Handbook de 2011.
Debates
- Collecte automatique versus gestion manuelle ou basée sur la propriété
- Les concepteurs débattent de la collecte des déchets, qui est sûre et pratique mais peut imposer des pauses et une surcharge, par rapport à la gestion manuelle ou basée sur la propriété, qui offre des performances prévisibles et une empreinte mémoire plus faible au prix d'une charge et d'un risque accrus pour le programmeur.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- Comment un collecteur de déchets sait-il quels objets libérer ?
- Un collecteur par traçage part de racines connues, telles que les variables de pile et les globales, et suit les références pour marquer tous les objets accessibles ; tout ce qui n'est pas atteint est inaccessible et peut être récupéré.
- Pourquoi la collecte générationnelle des déchets est-elle efficace ?
- Parce que la plupart des objets deviennent inaccessibles peu après leur allocation, la collecte fréquente de la jeune génération récupère la majeure partie des déchets à moindre coût, tandis que les objets plus anciens et à longue durée de vie sont balayés beaucoup moins souvent.