Certaines langues, par exemple java, ont introduit un GC à faible pause.
Ces GC peuvent faire la plupart du travail sans interrompre le monde entier. C'est évidemment un problème assez difficile car il nécessite d'analyser la mémoire lorsque le thread le modifie, ce qui entraîne des données qui peuvent être utilisées au début du processus et non plus à la fin, ou des données qui semblent être des ordures mais parce que le la référence a été déplacée dans la mémoire et n'est jamais apparue là où le GC regardait.
Donc, en gros, quel est l'algorithme derrière cela?
Les articles de recherche ou le lien d'un article vraiment technique seraient considérés comme une réponse valable, car ce sujet est vraiment technique.
la source
La raison pour laquelle cela fonctionne est que, en Java, seul le GC peut libérer de la mémoire qui pourrait contenir des références GC. Cela signifie que tant que vous pouvez lire des objets dans un thread séparé en toute sécurité, vous n'aurez qu'à suspendre le programme pour observer les références sur la pile.
Je suggérerais pour la mutation qu'ils mettent en œuvre une certaine forme de copie sur écriture pour informer le GC du changement.
la source