2009-07-10 5 views
1

Si je comprends bien à propos de garbage collection dans .NET CLR, alors GC se produit lorsque l'espace pour une allocation des types de référence est nécessaire, mais il n'y a plus de place sur le tas géré. Alors, le tas géré a-t-il une limite quant à la taille qu'il aura? Merci.Je pensais que le tas géré a augmenté dynamiquement?

Répondre

1

Oui, pour les processus 32 bits, l'espace d'adressage virtuel est limité à 2 Go (plus réaliste d'environ 1,5 Go lorsque vous prenez en compte tous les frais généraux du CLR). La limite pour les processus 64 bits est de 8 To.

Cela ne signifie pas que le tas est d'abord de 2 Go, mais que le tas peut atteindre cette taille. Le CLR allouera plus de mémoire si nécessaire. Le tas a des générations différentes (numérotées de 0 à 2) et chacune de ces générations a un seuil. C'est la réunion de ces seuils respectifs qui déclenche la collecte des ordures. Au cours de l'exécution de votre application, ces seuils seront ajustés pour répondre au mieux aux besoins de performance de votre application.

+0

La récupération de place ne se produira-t-elle qu'après l'utilisation de 2 Go de mémoire par le tas? Il semble que la récupération de place ne fonctionnera jamais pour la plupart des applications, car c'est une limite assez importante. –

+0

Existe-t-il un moyen de surveiller les limites de taille de chaque génération? Je voudrais vraiment un moyen de bas niveau de surveiller quand une collecte de place se produit pour approfondir ma compréhension. –

+0

Vous pouvez bien sûr! Vous pouvez utiliser perfmon - s'il vous plaît voir http://codebetter.com/blogs/raymond.lewallen/archive/2005/03/31/60938.aspx –

Questions connexes