2009-01-09 5 views

Répondre

20

Oui, ils sont. Fondamentalement, le GC part de "racines connues" (variables statiques, variables locales de toutes les trames de pile dans les threads alll) pour trouver des objets qui ne peuvent pas être récupérés. S'il n'y a aucun moyen d'accéder à un objet à partir d'une racine, il est admissible à la collecte.

EDIT: Tom a ceci, que je pensais que valait la peine levée dans la réponse elle-même:

Techniquement, les variables statiques ne sont pas racines - ils sont référencés par les classes qui sont référencés par les chargeurs de classe qui sont référencés par les classes référencées par l'objet qui sont référencées par les références racines.

La différence est susceptible d'être hors de propos plus du temps, mais il est bon de savoir :)

+0

Techniquement, les variables statiques ne sont pas des racines - elles sont référencées par des classes qui sont référencées par des chargeurs de classes qui sont référencés par des classes référencées par un objet qui sont référencées par des références racines. –

+0

@Tom: Bon appel. Modification ... –

4

Skeet est sur l'argent, comme d'habitude. J'ajouterai seulement que la situation que vous décrivez est la raison pour laquelle le comptage des références (une stratégie standard avec des pointeurs intelligents C++ au début) n'est pas utilisé.

Questions connexes