Garbage collection

Mise à jour : novembre 2007

Le garbage collector (également appelé ramasse-miettes) du .NET Framework manage l'allocation et la libération de mémoire dans votre application. Chaque fois que vous utilisez l'opérateur newpour créer un objet, le runtime alloue de la mémoire à l'objet à partir du tas managé. Tant que de l'espace d'adressage est disponible dans le tas managé, le runtime continue à allouer de l'espace pour les nouveaux objets. Toutefois, la mémoire n'est pas infinie. Le garbage collector doit finir par effectuer un garbage collection afin de libérer de la mémoire. Le moteur d'optimisation du garbage collector détermine le meilleur moment pour effectuer un garbage collection en fonction des allocations en cours. Lorsque le garbage collector effectue un garbage collection, il recherche les objets figurant dans le tas managé qui ne sont plus utilisés par l'application et effectue les opérations nécessaires pour récupérer leur mémoire.

Cette section décrit comment le garbage collector manage automatiquement l'allocation et la libération de mémoire pour les objets managés figurant dans votre application. De plus, elle décrit le modèle de design recommandé pour nettoyer correctement toutes les ressources non managées créées par votre application.

Remarque :

Dans la version 1.0 du .NET Framework, le Common Language Runtime (CLR) possède un gestionnaire de mémoire séparé pour le tas des objets volumineux. Dans certaines circonstances, ce gestionnaire de mémoire ne retourne pas la mémoire inutilisée au système d'exploitation et, parfois, ne rend pas la mémoire disponible pour le garbage collection. Cela se traduit par un échec d'allocation de mémoire dû à la fragmentation de l'espace d'adressage virtuel. Dans les versions 1.1 et 2.0 du .NET Framework, le tas des objets volumineux est composé de zones de mémoire contiguës appelées « segments de tas », correctement alignés pour limiter la fragmentation de la mémoire virtuelle. Pendant le garbage collection, l'espace libéré par des objets volumineux est consolidé et placé dans une liste libre. Les segments de tas qui contiennent uniquement des éléments de liste libres sont libérés et la mémoire est retournée au système d'exploitation. Ces modifications apportées au tas des objets volumineux ont ainsi éliminé les échecs d'allocation de mémoire dus à ce type de fragmentation de l'espace d'adressage virtuel.

Remarque importante :

Sur les serveurs disposant de plus de 2 Go de mémoire, il peut être nécessaire de spécifier le commutateur /3GB dans le fichier boot.ini pour éviter des problèmes de mémoire apparemment insuffisante alors que le système possède encore de la mémoire disponible.

Dans cette section

Référence

  • System.GC
    Fournit les méthodes permettant d'interagir avec le garbage collector système.

  • Object.Finalize
    Permet à un objet d'essayer de libérer des ressources et d'effectuer d'autres opérations de nettoyage avant que le garbage collector ne récupère l'objet.

  • System.IDisposable
    Propose des fonctionnalités pour une classe de ressource.

Rubriques connexes