2013-03-07 5 views
0

J'ai 6 java séparés Classes A,B,C,D,E and F. Crée un objet de Class B et appelle une méthode au Class B.Objets éligibles à la collecte des ordures

Class B La méthode crée un objet de class C et appelle une méthode dans class C.

Class C La méthode crée des objets de D,E,F classes et appelle leurs méthodes. Quand enfin le contrôle revient à la classe A à la fin, si je rend la référence d'objet de Class B comme nulle, cela rendra-t-il tous les objets de class B,C,D,E,F créés jusqu'ici éligibles pour le garbage collection?

+0

Pas tous les objets des classes données. Si les objets des types mentionnés ont été construits ailleurs, ils ne seront pas GC'ed –

Répondre

0

Oui. Ce sera. Puisque la classe parent est maintenant référencée à null et qu'elle est orpheline, tous les objets de référence en dessous seront éligibles pour GC.

Un objet entre dans un état inaccessible lorsqu'il n'existe plus de références fortes à celui-ci. Lorsqu'un objet est injoignable, il est un candidat pour la collecte

http: // 192.9.162.55 /docs/books/performance/1st_edition/html/JPAppGC.fm.html

+0

Vérifiez également le lien suivant: http://stackoverflow.com/questions/2433261/when-and-how-are-classes-garbage-collected -in-java –

0

Oui, ils seront admissibles à garbage collection fournit une condition si elles sont créées à l'intérieur des méthodes, c'est-à-dire localement, elles sont éligibles et si elles sont des objets de variable d'instance, alors seule la copie de cet objet sera nulle.

+0

La référence d'objet pour la classe B est un seul objet local. Cela rendra-t-il tous les objets de classe C, D, E, F éligibles pour gc? – user1929905

+0

Non, vous devez connaître le basic.Pour chaque objet, Toutes les variables d'instance ont une copie différente.Si vous attribuez une valeur nulle à un objet de B, alors seulement des copies dans cet objet (qui sont des objets C, D, E, F) sera ramassé les ordures. –

+0

Rechercher ces choses de base et vous obtiendrez beaucoup de choses à lire. –

0

Oui. "Un objet est éligible pour la récupération de place lorsqu'il n'y a plus de références à cet objet." Donc si b n'est plus référencé, il est éligible pour gc.

Quand à son tour il est collecté, il n'y a plus de références pour c, donc c devient éligible, et ainsi l'histoire continue.

0

GÉNÉRALEMENT oui, mais sans plus d'informations, nous ne pouvons pas dire avec certitude.
L'exemple principal serait si C place une référence aux instances de D qu'il crée dans une collection qui est stockée dans la session http ou dans la transaction EJB (ou y stocke directement une référence). Si cela se produisait, ces références empêcheraient les instances pertinentes de D d'être collectées et tout ce à quoi elles se réfèrent. Je suppose que vous voulez dire tous les objets dans le graphe mentionné.

+0

Mes classes utilisent des collections, mais n'utilisent pas de httpsession ou de choses liées à l'ejb. Seront-elles éligibles maintenant? – user1929905

+0

@ user1929905 cela dépend. Tant qu'une référence existe dans une collection et que cette collection n'est pas elle-même éligible pour la récupération de place, l'instance vers laquelle pointe la référence n'est pas non plus éligible.Donc, si vous aviez une collection dans la classe appelant A qui était passée dans une méthode sur A qui ajoutait une référence à B à cette collection, B resterait tant qu'elle resterait dans cette collection à moins que la collection elle-même ne soit supprimée. – jwenting