Algorithme de marquage et de balayage en JavaScript

En tant que développeur, comprendre comment l’algorithme Mark and Sweep en JavaScript aide à écrire un code efficace
Gestion de la mémoire :
Une allocation de mémoire sera créée pour toutes les variables, objets, fonctions que nous déclarons dans le code. Le tas mémoire est l’endroit où sont stockés tous ces souvenirs. C’est constamment en synchronisation avec la pile d’appels. Une fois la phase d’exécution commencée, il y aura une opération de lecture/écriture pour cette mémoire une fois c’est terminé avec l’exécution, cette partie de l’emplacement mémoire doit être nettoyée.
Collecte des déchets :
La collecte des déchets aide à nettoyer la mémoire qui n’est plus utilisée par le code. Cela évite les fuites de mémoire. En JavaScript, le garbage collection est géré par le moteur JavaScript. Le garbage collection prend en compte les références et tente de libérer la mémoire si un emplacement n’est pas accessible.
let obj = { name: 'Orange', } let obj = null;
Dans cet exemple, l’obj a une référence au nom qui est orange, et cette référence est annulée car l’obj est nul. Le « nom » n’aura aucune référence. Rien ne peut accéder à cette valeur sans aucune référence, elle n’est donc pas « accessible ».
L’algorithme de marquage et de balayage :
L’algorithme de marquage et de balayage est le technique de collecte des ordures utilisée en JavaScript. Il fonctionne en deux phases :
- Marquage
- Balayage
L’algorithme part de l’objet racine et vérifie la référence liée. Si cet algorithme trouve des emplacements inaccessibles, ce sont ces emplacements qui doivent être supprimés.
Phase de marquage :
« Marquer » marquera tous les éléments référencés. Des valeurs qui ne sont pas accessible et ne pas toute référence ne sera pas marquée.
Exemple n°1 :
globalObj → obj1 functionA → obj2 → obj3 functionB (unmarked)
- Il marque globalObj, ce qui conduit au marquage obj1.
- Ensuite, il vérifie la fonctionA, en marquant obj2, puis obj3 puisque obj2 y fait référence.
- functionB n’est pas marquée car elle ne fait référence à rien.
Phase de balayage :
Le Garbage collector scanne la mémoire qui n’est pas marquée lors de la phase de marquage. Les objets non marqués sont considérés comme inaccessibles.
Il constate que la fonctionB n’est pas marquée et peut donc être collectée.
La mémoire occupée par la fonctionB est désormais libérée, tandis que globalObj, obj1, functionA, obj2 et obj3 restent.
Exemple #2 :
let author1 = { name: "J.K. Rowling", books: [] }; let author2 = { name: "George Orwell", books: [] }; let book1 = { title: "Harry Potter", author: author1 }; let book2 = { title: "1984", author: author2 }; // Establishing references author1.books.push(book1); author2.books.push(book2); // Later we remove one author and their books author1 = null;
Phase de marquage par exemple #2:
Objet accessible marqué qui est author2 et book2.
author1 est défini sur null, il n’est donc pas marqué. Par conséquent, book1 n’est pas marqué et n’est accessible que via author1.
Phase de balayage par exemple #2:
Collecte les objets non marqués (inaccessibles) author1 et book1 et libère la mémoire occupée par ces objets.
État final de l’exemple n°2 :
Mémoire libérée : auteur1, livre1
Mémoire conservée : auteur2, livre2
Pourquoi la collecte des déchets est-elle importante ?
Empêche les fuites de mémoire : comprendre le fonctionnement du garbage collection permet d’éviter les problèmes entraînant des fuites de mémoire.
Améliore les performances : lorsque la mémoire est gérée efficacement, votre application s’exécute de manière plus fluide et plus rapide.
Avantages de l’algorithme de marquage et de balayage
- Gère les références cycliques: L’algorithme gère les références cycliques sans rester coincé dans une boucle infinie
- Pas de frais supplémentaires: Il ne produit pas de frais généraux supplémentaires lors de son exécution
- Récupération efficace de la mémoire: Peut récupérer de la mémoire en gros morceaux, plutôt qu’un seul objet à la fois
Inconvénients de l’algorithme de marquage et de balayage
- Interruptions: provoque des interruptions dans l’exécution normale du programme pendant l’exécution de l’algorithme de récupération de place.
- Fragmentation: conduit à une fragmentation de la mémoire, avec de petites régions de mémoire inutilisées dispersées dans le tas.
- Prend du temps: La phase de balayage peut prendre beaucoup de temps car chaque emplacement de la mémoire doit être examiné.
Techniques d’optimisation pour l’algorithme de marquage et de balayage
- Balayage paresseux: Exécute la phase de balayage en répartissant le coût du balayage dans le temps.
- Marquage bitmap: utilise un bitmap pour stocker les informations de marquage, réduisant ainsi la surcharge d’espace et améliorant les performances.
- Inversion du pointeur: Élimine le besoin d’une pile de marquage en recyclant les variables, réduisant ainsi la surcharge d’espace.
- Marquage incrémentiel: divise la phase de marquage en morceaux plus petits pour éviter de longues pauses.
Comprendre l’algorithme Mark and Sweep et ses optimisations aide à écrivez du code plus efficace et gérez efficacement la mémoire. Par tirer parti ces techniques, nous pouvons éviter les fuites de mémoire et améliorer les performances de le candidatures. Pour plus d’informations, contactez nos experts techniques. Concevez avec précision, codez intelligemment !
Source link