7
votes

Comment la collecte des ordures se produit-elle pour les classes ayant des méthodes statiques en C # / vb.net?

définit l'objet à NULL le faire marquée pour GC?

Edit: une classe a plusieurs méthodes statiques. Lorsque vous utilisez ces méthodes dans votre programme, quelle est la meilleure façon de vous assurer que les objets sont marqués pour GC après un certain point?


0 commentaires

4 Réponses :


11
votes

les méthodes ne sont pas des ordures recueillies du tout - il n'est donc pas vraiment clair que votre question signifie.

De même, vous ne définissez jamais un objet à NULL. Vous pouvez faire la valeur d'une variable null, mais qui n'a rien à un objet à la variable précédemment mentionnée. Cela signifie simplement que la prochaine fois que le collecteur des ordures recherche un objet en direct, cette variable ne contribuera pas d'objet à l'ensemble d'objets qui doivent être conservés en vie à la fin du GC.

Je vous suggère de lire Article de Jeffrey Richter sur la collection à la poubelle pour un Bit plus de fond, puis posez des questions spécifiques supplémentaires lorsque vous devez saisir les bases.


0 commentaires

3
votes

Les objets ne sont pas marqués pour gc, ils sont marqués (par l'existence d'une variable qui les référencent ou les indique) à pas < / em> être déposé collectés. Lorsque chaque variable ou chaque référence à un objet dans tous les filets exécutants, et dans toutes les variables statiques globales, et dans tous les registres de la CPU, a été supprimé, disparu ou réglé sur NULL, puis l'objet n'est plus accessible et le GC va le chercher.


0 commentaires

5
votes

Si vous posez des questions sur ce qui arrive aux objets référencés par des variables dans des méthodes statiques, ces objets deviennent éligibles pour la collecte des ordures lorsqu'ils ne sont plus en portée.

Si vous parlez d'objets référencés par des champs statiques, ceux-ci ne sont pas collectés, en termes simples, ne sont pas collectés jusqu'à ce que les références soient définies sur NULL. P>

L'exemple suivant peut illustrer cela mieux: P>

class Example
{
    private static object field1 = new object();

    public static void SomeMethod()
    {
        object variable1 = new object();

        // ...
    }

    public static void Deref()
    {
        field1 = null;
    }
}


0 commentaires

0
votes

Pensez à des méthodes statiques comme la classe les méthodes. Ils sont disponibles si un objet existe ou non. Ils n'ont aucune incidence sur la collecte des ordures.


0 commentaires