Garbage collector
De Banane Atomic
Aller à la navigationAller à la recherche
Fonctionnement
- Parcourt la heap
- Pour chaque élément de la génération 0, regarde s'il est référencé par un root item (static field, method parameter, local variable, CPU register)
Passe aux autres générations si trop peu de mémoire a été libérée.- Si oui, l'élément est marqué comme vivant
- Opération de collecte
- Tous les threads sont gelés
- Regroupe les éléments vivants et supprime tous les autres
Le GC se lance quand il n'y a plus de place pour créer un objet dans la heap ou quand Windows atteint un niveau de mémoire faible. |
stack / heap
stack | types valeur, référence vers les objets stockés dans la heap. Vidée à la fin de chaque méthode, non-géré par le GC. |
heap | types références. Géré par le GC. |
Forcer la collecte des déchets
GC.Collect(); GC.WaitForPendingFinalizers(); |
Finalizer
Appelé par le GC.
public class MyClass { ~MyClass() { // This code is called when a garbage collection occurs } } |
IDisposable
Appelé par le code.
public void Dispose() { // code libérant les ressources // ... // retire l'objet de la liste de finalisation. // on s'est occupé nous-même de libérer les ressources, le GC n'a plus besoin d'appeler le finaliseur System.GC.SuppressFinalize(this); } |
WeakReference
Le GC ne peut pas collecter un objet qui a une strong ref sur lui.
Le GC peut pas collecter un objet qui a une weak ref sur lui, la weak ref permet à cet objet d'être accessible tant qu'il n'a pas été collecté.
Les weak ref sont utiles pour les objets qui utilisent beaucoup de mémoire, mais qui peuvent être recréés facilement s'ils sont collectés par le GC.