☰ Menu

30.09.2026 · Signal Titans Editorial

Les développeurs de Python débattent d’un ramasse-miettes hybride, générationnel et incrémental

Au Language Summit, les développeurs de Python ont discuté d'un ramasse-miettes hybride suite aux problèmes de mémoire observés dans Python 3.14.

Une illustration conceptuelle d'une balance avec une sphère verte représentant l'efficacité mémoire d'un côté et un sablier bleu représentant la réduction des temps de pause de l'autre.

Lors du Python Language Summit 2026, le développeur principal Mark Shannon a présenté une proposition d'architecture hybride pour le ramasse-miettes, combinant des stratégies générationnelles et incrémentales. Cette intervention fait suite au retour en arrière effectué sur Python 3.14, où le collecteur incrémental expérimental a été remplacé par le collecteur générationnel de Python 3.13 en raison de fortes pressions sur la mémoire signalées en production.

Équilibrer les temps de pause et l'empreinte mémoire

La gestion de la mémoire dans Python repose principalement sur le comptage de références, le ramasse-miettes de détection de cycles intervenant en second recours et représentant environ 11,67 % du temps d'exécution. Bien que le système générationnel de Python 3.13 conserve une consommation mémoire globale plus faible, il peut engendrer des temps de pause maximaux d'environ trois secondes. De son côté, le collecteur incrémental introduit dans Python 3.14 a réussi à réduire ces pauses maximales à quelques dizaines de millisecondes, mais sa conception non générationnelle s'est traduite par une hausse de l'occupation mémoire sur les grands tas.

Mark Shannon a souligné que les deux mécanismes actuels affichent une faible efficacité de collecte — le ratio entre objets collectés et objets visités —, s'élevant à 0,3 % pour le système générationnel et à environ 1 % pour le modèle incrémental.

Proposition d'une stratégie de collecte hybride

Pour résoudre le compromis entre durée des pauses et surcoût mémoire, Shannon a esquissé une structure unifiée reposant sur deux générations : une jeune génération de 20 Mo et une ancienne génération. Sa proposition alterne le balayage incrémental entre ces deux niveaux tout en nettoyant l'ancienne génération à un rythme équivalant au double du taux de survie de la jeune génération.

Inquiétudes des développeurs concernant le paramétrage et la maintenance

Les échanges du sommet ont mis en évidence des divergences sur la configurabilité et la maintenance du système. Les développeurs Donghee Na et Pablo Galindo Salgado ont soulevé des questions sur les API publiques de configuration et le réglage en cours d'exécution pour éviter de bloquer les mises à jour et gérer les cas particuliers. À l'inverse, Shannon et Gregory P. Smith se sont montrés réservés quant à l'introduction d'options à la Java ou au support de multiples collecteurs, expliquant que des API publiques de réglage risquent de brider les futures optimisations internes et d'alourdir la maintenance.

Interrogé sur la possibilité d'un ramasse-miettes concurrent ou sans verrou, Shannon a indiqué que les extensions en C posent des obstacles structurels, car elles peuvent accéder directement à la mémoire sans suivi par le moteur d'exécution.

Illustration éditoriale générée par IA ; ce n’est pas une photographie documentaire.

Source: Garbage Collection: Generational? Incremental? Both! (Python Language Summit 2026)