Lorsque nous attribuons null à une variable globale pour déréférencer et libérer activement de la mémoire, s'agit-il d'une stratégie de comptage de références ? Cela ne signifie-t-il pas que le mécanisme de récupération de place de JS utilise uniquement Mark et Clear ? La stratégie d'effacement des marques n'implique-t-elle pas de déréférencement ?
La déclaration de variable alloue de la mémoire sur le tas. Marquer la référence correspondante comme nulle indique à l'interpréteur que l'espace mémoire correspondant à cette variable peut être récupéré.
Mais il s'agit de la conception syntaxique de JS et n'implique pas les détails de la gestion de la mémoire dans l'implémentation de l'interpréteur. En fait, les stratégies GC des navigateurs sont également différentes. Chrome/Firefox/Safari utilisent le marquage et le balayage, tandis que les anciennes versions d'IE utilisent le comptage de références.
De plus, le déréférencement ne consiste pas seulement à attribuer une valeur nulle. L'interpréteur peut déterminer le cycle de vie des variables via la portée et récupérer l'espace mémoire des variables lorsqu'elles quittent la portée de la variable.
[Mark Clearance] et [Reference Counting] sont deux algorithmes GC différents, tandis que [Dereference] est une fonctionnalité grammaticale dans JS. Les deux peuvent être orthogonaux (non pertinents).
La spécification js consiste à utiliser mark et clear, mais si elle est implémentée, elle peut ne pas toujours être mark et clear.
La raison pour laquelle vous êtes confus ici est que vous ne voyez que l'apparence du recyclage et ne voyez pas l'essence du nettoyage.
Le comptage de références, comme son nom l'indique, compte les références à un objet, et lorsque la référence est 0, elle est recyclée.
Le marquage et l'effacement sont divisés en deux phases. La phase de marquage part de la racine et traverse les objets accessibles sont comparés aux objets accessibles, puis les objets non marqués sont recyclés dans la phase d'effacement.
En fait, à moins de regarder l'implémentation du code source, il est difficile de dire quelle stratégie est utilisée depuis la surface.