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
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.
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.
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.
- 1. Allouer la mémoire constante
- 2. Tableau constante et gestion de la mémoire
- 3. mémoire CUDA constante de symbole invalide
- 4. Pourquoi `exists` modifie-t-il ma constante?
- 5. Processus Limite de mémoire du processus 64 bits
- 6. Allocation dynamique de la mémoire constante dans CUDA
- 7. HSQLDB mange toute ma mémoire
- 8. Vider la mémoire d'un processus
- 9. Analyse de la mémoire pour un processus
- 10. asp.net dans la mémoire de processus, sqlite?
- 11. IIS Worker Processus utilisant beaucoup de mémoire?
- 12. La plus longue sous-chaîne commune avec mémoire constante?
- 13. libération constante de NSString
- 14. Constante de complexité asymptotique, pourquoi la constante?
- 15. Comment savoir où va ma mémoire
- 16. Pourquoi plusieurs threads mangent-ils ma mémoire?
- 17. Sempahores la mémoire partagée et processus (IPC)
- 18. Mémoire maximale qu'un processus .NET peut allouer
- 19. Comment conserver la mémoire du processus protégé
- 20. Saisissant la mémoire d'un autre processus
- 21. Verrouiller ou Pin processus Java en mémoire
- 22. Mémoire partagée entre 2 processus (applications)
- 23. Ma chance de façonner notre processus de développement/politique
- 24. consommation de mémoire de niveau de thread de processus
- 25. Constante getOutputSize?
- 26. Processus de développement, comment mener ma programmation à l'étape suivante
- 27. Exécution d'un processus de la mémoire C/C++
- 28. Détermination de l'utilisation maximale de la mémoire d'un processus
- 29. Spécifier l'adresse de début de la mémoire pour un processus
- 30. utilisation de la mémoire de mesure d'un processus sur Linux
S'il n'y a pas de mémoire disponible sur le système, pourquoi le GC devrait-il démarrer? – kofucii
@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
C'est toujours une bonne question cependant. C'est juste la politique que le .NET GC suit. :) – jalf