2011-05-02 5 views
0

je sais GC libérer la mémoire d'obj qui n'est pas utilisé dans d'autres, mais je sais une chose que la mémoire de libération GC dans quelle forme de l'objet ou de la réfrence ou valeur s'il vous plaît aidez-moi.requête concernant Garbage collector

merci à l'avance ...

+0

On ne sait pas exactement quelle est votre question. Demandez-vous * comment * le GC libère de la mémoire? Ou quels types de choses il est responsable de libérer? – Wyzard

+0

je veux savoir une chose GC libérer la mémoire dans quel terme de l'objet ou de la réfrence ou de la valeur ... –

+0

Je crains que la phrase n'a pas beaucoup de sens. Pouvez-vous s'il vous plaît essayer de le reformuler et de le décrire d'une autre manière? – DarkDust

Répondre

1

En réponse aux commentaires à la question, il semble que vous avez besoin d'éclaircissements de quelques concepts:

Dans .NET, objets vivent quelque part dans le Mémoire. Une référence est un peu comme un pointeur vers un tel objet/emplacement de mémoire. Une valeur est une valeur intégrale (un nombre comme 123). Par exemple, supposons que vous avez un objet de type MyClass et que vous avez créé une nouvelle instance. Cet objet contient une chaîne. Cette chaîne est un autre objet et votre instance de MyClass contient une référence à l'objet chaîne.

Le garbage collector fonctionne uniquement sur les objets . Il garde une trace des références à un objet, si plus personne ne fait référence à l'objet, le garbage collector peut libérer cet objet. Dans notre exemple, si le garbage collector remarque qu'il n'y a personne détenant une référence à l'instance de MyClass, alors il s'assure que l'objet est libéré. Cela à son tour fait disparaître la référence à la chaîne, et le garbage collector peut alors également libérer la chaîne (si personne d'autre ne détient une référence, bien sûr). Les valeurs n'ont pas besoin d'être traitées d'une manière particulière car elles font partie de la mémoire qui appartient à un objet (et ne peuvent donc pas être libérées "indépendamment").

La même chose est vraie avec Java, BTW.

0

Un objet d'un type de référence (une classe) devient obsolète lorsqu'aucune référence n'existe plus. Il sera recueilli quelque temps après, chaque fois que le GC se déroule. La raison pour laquelle ces objets peuvent être corrompus est qu'ils peuvent être référencés à partir de plusieurs endroits du programme, de sorte qu'aucune partie individuelle du programme ne peut libérer l'objet car d'autres parties pourraient en avoir besoin. La responsabilité du GC est de découvrir lorsqu'aucune partie du programme n'a besoin de l'objet.

Un objet d'un type de valeur (une structure ou un type intégré comme un entier) est simplement copié sur chaque emplacement qui doit l'utiliser, donc il n'y a aucun problème d'utilisation d'une valeur de plusieurs parties du programme. Aucun GC n'est nécessaire pour les types de valeur, car ils font toujours partie de quelque chose d'autre qui garantit leur publication. Une valeur stockée dans la pile (par exemple, une variable locale dans une méthode) est libérée lorsque la méthode revient. Une valeur stockée dans un objet de classe est libérée lorsque cet objet de classe devient inutilisable.