2010-04-01 5 views

Répondre

0

garbage collector a 3 générations 0 1 2

la plus haute génération 2. Dans .net le garbage collector est normalement invocked implicitement mais vous pouvez forcer le GC aussi explicitement.

lorsque les premières générations est de remplir à savoir 0 GEN & votre application souhaite stocker une plus grande valeur alors ce GC invocks & contrôle quels éléments sont utilisés & qui ne sont pas & Delets l'élément utilisé si tous les éléments sont utilisés alors tous les éléments sont transférés au niveau un peu plus élevé ie 1 GEN simliarly à 2 GEN quand toutes les générations sont remplies & vous voulez stocker plus d'élément alors GC va lancer une exception de mémoire hors de l'exception.

+2

Il y a aussi le Large Object Heap, qui est un tas spécial pour l'objet d'au moins 85000 octets. Il est géré un peu différemment des tas de générations. –

1

Vous ne génère pas le garbage collector - la poubelle juste collecter est.

Il se déclenche (à des moments imprévisibles) et efface tous les éléments qui ne sont plus référencés. Vous pouvez "Suggérer" qu'il peut vouloir travailler immédiatement en appelant la méthode Collect sur le Garbage Collector, auquel vous pouvez accéder via System.GC - mais cela ne garantit pas qu'il répondra immédiatement.

Espérons que ça aide.

+1

@Martin: Le garbage collector classifie en interne les blocs de mémoire en générations, je suppose que c'est ce que l'OP veut savoir. –

4

Il existe plusieurs techniques d'optimisation utilisées par Garbage Collector. L'un d'eux utilise des générations d'objets. Tout objet sur le tas appartient à l'une des générations:

  • Génération 0 - objets nouvellement alloués. ils n'ont jamais été marqués pour la collecte pour le moment.
  • Génération 1 - les objets de cette génération ont survécu à un balayage.
  • Génération 2 - les objets de cette génération ont survécu à plus d'un balayage.

GC balaie les générations avec un nombre plus élevé beaucoup moins fréquemment.

Questions connexes