Ramasse-miettes
La libération automatique de la mémoire : objet atteignable depuis les racines, objet récupérable, marquage puis balayage, comptage de références et cycles, fuite par une référence qu'on garde sans le vouloir.
- 29 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Les étapes
- Mises en situation
Quelques cartes du deck
Ramasse-miettes : de quoi s'agit-il ?
Voir la réponse
Mécanisme de l'environnement d'exécution qui libère tout seul la mémoire des objets dont le programme ne peut plus se servir.
En Java et en Python, on n'écrit pas de
free. Le moment du passage est décidé par la machine virtuelle :System.gc()n'est qu'une suggestion, sans garantie.Après ce code, quels objets sont récupérables ?
```java
Noeud a = new Noeud("A");
Noeud b = new Noeud("B");
Noeud c = new Noeud("C");
a = b;
c = null;`- L'objet A et l'objet C
- L'objet C seulement, car A est encore désigné
- L'objet A seulement, car C a été annulé
- Les objets B et C, car B a été copié
Voir la réponse
L'objet A et l'objet C
Après
a = b, les variablesaetbdésignent toutes deux l'objet B, et plus rien ne désigne l'objet A.c = nullcoupe la seule référence à l'objet C. B reste atteignable.Un objet est … quand aucun chemin de références ne le relie plus à une ….
Voir la réponse
Un objet est récupérable quand aucun chemin de références ne le relie plus à une racine.
C'est le seul critère : peu importe que l'objet ait encore des références vers d'autres objets, ou qu'il soit désigné par un objet lui-même inatteignable.
Racine : de quoi s'agit-il ?
Voir la réponse
Point de départ du programme où une référence est directement utilisable : variables locales des méthodes en cours, attributs statiques.
Tout ce qu'on peut atteindre en suivant des références depuis une racine est vivant. Un objet qu'aucune racine ne rejoint est inutilisable.
Une passe de marquage et balayage : quelle étape vient après « Repérer les racines du programme » ?
- Marquer les objets que les racines désignent
- Suivre les références des objets marqués et marquer ce qu'elles atteignent
- Parcourir le tas en cherchant les objets sans marque
- Libérer les objets sans marque
Voir la réponse
Marquer les objets que les racines désignent
Le balayage ne peut commencer qu'une fois le marquage terminé : tant qu'il reste des références à suivre, un objet sans marque pourrait encore être vivant.