Maison > interface Web > js tutoriel > le corps du texte

Une brève analyse du mécanisme de récupération de place JS et de la gestion de la mémoire

零到壹度
Libérer: 2018-04-04 14:36:24
original
1162 Les gens l'ont consulté

Cet article présente principalement une brève analyse du mécanisme de récupération de place JS et de la gestion de la mémoire. L'éditeur pense qu'il est assez bon, je vais donc le partager avec vous maintenant et le donner comme référence. Venez jeter un œil avec l'éditeur

Garbage Collection

Le mécanisme de garbage collection en JavaScript est très simple : recherchez les variables qui ne sont plus utilisées, puis libérez-les.

Les variables locales n'existent que pendant l'exécution de la fonction, donc lorsque l'exécution de la fonction se termine, il n'est pas nécessaire que les variables locales existent. Mais toutes les variables ne sont pas si faciles à juger, donc certaines méthodes doivent être utilisées. pour les recycler Variable

1 Effacement de la marque :

La méthode de récupération de place la plus couramment utilisée en JavaScript consiste à effacer la marque Lorsqu'une variable entre dans l'environnement, marquez-la. variable comme "Entrer dans l'environnement", lorsque la variable quitte l'environnement, marquez la variable comme "quittant l'environnement". De manière générale, nous n'effacerons que les variables avec la marque d'environnement de sortie, car il n'y a aucun moyen d'y accéder. le garbage collector termine le travail d'effacement de la mémoire.

2 Comptage de références :

Cette méthode n'est pas si couramment utilisée. La signification du comptage de références est d'enregistrer le nombre de fois que chaque valeur. est référencé. Lorsque le nombre de références est réduit à 0, cela signifie qu'il n'y a plus aucun moyen d'accéder à cette valeur, donc la mémoire qu'elle occupe peut être libérée

Mais il y a un problème avec le comptage des références : référence circulaire. Par exemple :


function problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}
Copier après la connexion

Dans cet exemple, objectA et objectB se référencent mutuellement via leurs propriétés respectives ; fois

Les chiffres sont tous 2. Dans une implémentation qui utilise une stratégie de marquage et de balayage, cette référence mutuelle ne pose pas de problème car les deux objets sortent de la portée une fois la fonction exécutée. Mais dans une implémentation qui utilise une stratégie de comptage de références, objectA et objectB continueront d'exister après l'exécution de la fonction, car leur nombre de références ne sera jamais 0. Si cette fonction est appelée plusieurs fois, une grande quantité de mémoire ne sera pas recyclée

Afin d'éviter ce problème, nous devons les mettre à null lorsqu'elles ne sont pas utilisées pour éliminer les références circulaires

Gestion de la mémoire :

Nous savons tous que la quantité de mémoire disponible allouée aux navigateurs Web est généralement inférieure à celle allouée aux applications de bureau. Le but est principalement pour des raisons de sécurité, et le but est d'empêcher une page Web exécutant JavaScript d'utiliser toute la mémoire système et de provoquer un crash du système. Les problèmes de limite de mémoire affectent non seulement l'allocation de mémoire pour les variables, mais également la pile d'appels et le nombre d'instructions pouvant être exécutées simultanément dans un thread.

Par conséquent, s'assurer que la quantité minimale de mémoire est occupée permet à la page d'obtenir de meilleures performances. La meilleure façon d'optimiser l'utilisation de la mémoire est de sauvegarder uniquement les données nécessaires à l'exécution du code. Une fois que les données ne sont plus utiles, c'est une bonne idée de libérer leur référence en définissant leur valeur sur null, une pratique appelée déréférencement. Cette approche s'applique à la plupart des variables globales et des propriétés des objets globaux. Les variables locales sont automatiquement déréférencées lorsqu'elles quittent l'environnement d'exécution, comme le montre l'exemple suivant :

function createPerson(name){
var localPerson = new Object();
localPerson.name = name;
return localPerson;
}
var globalPerson = createPerson("Nicholas");
// 手工解除globalPerson 的引用
globalPerson = null;
Copier après la connexion

Déréférencer une valeur ne signifie pas recycler automatiquement la mémoire occupée par la valeur. En réalité, un déréférencement supprime la valeur de l'environnement d'exécution afin qu'elle puisse être récupérée lors de la prochaine exécution du garbage collector.

Recommandations associées :

mécanisme de récupération de place Java, gestion de la mémoire

Mécanisme de récupération de place JS et allocation de mémoire

Mécanisme de récupération de place JavaScript et problème de fuite de mémoire

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal