aboutsummaryrefslogtreecommitdiff
path: root/files/fr/tools/memory/dominators/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/fr/tools/memory/dominators/index.html')
-rw-r--r--files/fr/tools/memory/dominators/index.html62
1 files changed, 62 insertions, 0 deletions
diff --git a/files/fr/tools/memory/dominators/index.html b/files/fr/tools/memory/dominators/index.html
new file mode 100644
index 0000000000..30dee2db22
--- /dev/null
+++ b/files/fr/tools/memory/dominators/index.html
@@ -0,0 +1,62 @@
+---
+title: Dominants
+slug: Outils/Memory/Dominators
+translation_of: Tools/Memory/Dominators
+---
+<div>{{ToolsSidebar}}</div>
+
+<div class="summary" id="Concepts">
+<p>Cet article fournit une introduction aux concepts d'<em>Accessibilité</em>, de taille <em>Objet</em> et de taille <em>Retenue</em>, ainsi que des <em>Dominants</em>, et de comment ses concepts s'appliquent dans des langages à ramasse-miette (garbage-collector) comme le JavaScript.</p>
+
+<p>Ces concepts sont importants pour l'analyse mémoire, car souvent, un objet peut être en lui même petit, mais contenir des références à des objets beaucoup plus gros et cela empêche le ramasse-miette de collecter ces objets et de libérer de la mémoire.</p>
+
+<p>Il est possible de voir les dominants d'une page en utilisant la <a href="/fr/docs/Tools/Memory/Dominators_view">Vue "Dominants"  </a>dans l'outil Mémoire.</p>
+</div>
+
+<p>Dans un langage comme JavaScript, les programmeurs n'ont généralement pas à se soucier de la gestion de la mémoire. Ils peuvent simplement créer des objets, les utiliser, et lorsque ceux-ci ne sont plus nécessaires, le runtime se charge de faire le nettoyage, et libère la mémoire que les objets utilisaient.</p>
+
+<h2 id="Accessibilité"><em>Accessibilité</em></h2>
+
+<p>Dans les implémentations modernes de JavaScript, le runtime décide de quand un objet n'est plus nécessaire en se basant sur <em>l'accessibilité</em>. Dans ce système, la heap est représentée par un ou plusieurs graphes. Chaque noeud dans le graphe représente un objet, et chaque connexion entre les noeuds (edge) représente une référence d'un objet à un autre. Le graphe commence au noeud racine, indiqué dans les diagrammes suivant par un "R" :</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/12383/memory-graph.svg" style="display: block; height: 268px; margin-left: auto; margin-right: auto; width: 384px;"></p>
+
+<p>Lors du passage du ramasse-miette, le runtime parcourt le graphe à partir de la racine et marque chaque objet qu'il trouve. Tous les objets qui ne sont pas trouvés dans ce parcours, ne sont pas accessibles et peuvent être désalloués.</p>
+
+<p>Donc lorsqu'un objet devient inaccessible (par exemple parce qu'il était référencé par une seule variable locale qui sort du scope actuel) alors tout objet qu'il référence devient également inaccessible à son tour (sauf s’il était référencé par d'autres objets qui sont eux toujours accessibles) :</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/12375/memory-graph-unreachable.svg" style="display: block; height: 267px; margin-left: auto; margin-right: auto; width: 383px;"></p>
+
+<p>A l'inverse, cela veut dire que des objets sont gardés en vie tant qu'un autre objet accessible comporte une référence à cet objet.</p>
+
+<h2 id="Taille_de_lobjet_et_taille_retenue">Taille de l'objet et taille retenue</h2>
+
+<p>Tout cela donne naissance à deux façons différentes de considérer la taille d'un objet :</p>
+
+<ul>
+ <li><em>taille de l'objet</em>: la taille de l'objet lui-même</li>
+ <li><em>taille retenue </em>: la taille de l'objet lui-même ainsi que la raille de tous les objets qui sont gardés en vie grâce à cet objet.</li>
+</ul>
+
+<p>Souvent, les objets auront une taille d'objet faible, mais une bien plus grande taille retenue, à cause de ses références à d'autres objets. La taille retenue est un concept important dans l'analyse de l'utilisation mémoire, car cela répond à la question "si cet objet cesse d'exister, quelle est la taille de mémoire libérée ?".</p>
+
+<h2 id="Dominants">Dominants</h2>
+
+<p>Un concept lié à cela est le concept de <em>dominants</em>. Un noeud B "domine" le noeud A si tous les chemins depuis la racine jusqu'à A passent par B :</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/12379/memory-graph-dominators.svg" style="display: block; height: 309px; margin-left: auto; margin-right: auto; width: 471px;"></p>
+
+<p>Si un des noeuds dominants du noeud A est libéré, alors le noeud A lui-même devient éligible au ramasse-miette.</p>
+
+<p><a id="immediate_dominator" name="immediate_dominator">Si le noeud B domine le noeud A mais ne domine aucun des dominants de A, alors B est le <em>dominant immédiat </em>de A :</a></p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/12381/memory-graph-immediate-dominator.svg" style="display: block; height: 309px; margin-left: auto; margin-right: auto; width: 467px;"></p>
+
+<p><a id="multiple-paths" name="multiple-paths">Une subtilité ici est que si un objet A est référencé par deux autres objets B et C, alors aucun de ces deux objets n'est un dominant de A</a>, car il est possible de retirer soit B soit C du graphe et A serait alors toujours référencé par son autre référent. À la place, le dominant immédiat de A est le premier ancêtre commun :<br>
+ <img alt="" src="https://mdn.mozillademos.org/files/12331/memory-graph-dominator-multiple-references.svg" style="display: block; height: 283px; margin-left: auto; margin-right: auto; width: 211px;"></p>
+
+<h2 id="Voir_Aussi">Voir Aussi</h2>
+
+<p><a href="https://en.wikipedia.org/wiki/Dominator_%28graph_theory%29">Les dominants dans la théorie des graphes</a>.</p>
+
+<p><a href="https://en.wikipedia.org/wiki/Tracing_garbage_collection">Tracing garbage collection</a>.</p>