2010-10-04 2 views
0

C'est une question académique. Si j'ai un nombre constant de variables, d'objets, etc. Et nous supposons que le GC ne fonctionnera pas, et il n'y a pas de goulots d'étranglement. Un autre facteur pourrait-il forcer la mémoire de ma demande à fluctuer? Dans un tel scénario alloué par ma mémoire de processus rester constant?Ma mémoire de processus est-elle constante?

Répondre

1

Vous pouvez appeler des fonctions non gérées à l'aide d'interop qui modifie la quantité de mémoire disponible. En outre, le compilateur JIT peut démarrer à tout moment pour convertir l'IL en code machine et consommer probablement de la mémoire. En supposant également que GC ne sera pas kick dans n'est pas quelque chose que vous pouvez réellement supposer si vous utilisez. NET, donc toute conclusion que vous dessinez à partir d'une mauvaise supposition sera erronée. Donc, pour répondre à votre question, vous ne pouvez pas supposer que la mémoire restera constante.

1

Votre scénario est irréaliste et artificiel:

Et nous supposons que GC ne débutera pas

Eh bien, il le fera. Votre application peut prendre des chemins différents lors de son exécution. Si c'est le cas, que l'état peut être différent de temps en temps, les références aux objets sur le tas peuvent être conservées plus longtemps, etc. Je ne vois pas vraiment le but de cette question.

+1

S'il n'y a pas de mémoire disponible sur le système, pourquoi le GC devrait-il démarrer? – kofucii

+1

@kofucii: le GC fonctionne avec différentes tailles de jeu de données. Les données les plus récemment allouées sont placées dans un très petit tampon, et lorsque celui-ci est épuisé, le GC s'exécute, nettoie certaines allocations et déplace les autres vers le plus grand tas pour les objets plus anciens. Ainsi, même si vous disposez de suffisamment de mémoire, le .NET GC fonctionnera une fois que vous aurez alloué une quantité de mémoire relativement faible, quelle que soit la quantité totale de mémoire dont vous disposez. – jalf

+0

C'est toujours une bonne question cependant. C'est juste la politique que le .NET GC suit. :) – jalf

1

Il est possible, comme dans le type de cas mentionné dans la question à How do these people avoid creating any garbage? de mettre un système dans un état où il travaille avec un jeu de mémoire constante et aucun GC ne se passe (parce que rien n'est alloué qui en aura besoin recueillir et il meurt à rien). L'article lié à même a un cas pratique (mais hautement spécialisé).

Notez qu'ils ont un grand nombre de méthodes et de classes qu'ils n'utilisent pas que la plupart d'entre nous utiliseraient tous les jours.

Questions connexes