Garbage Collection Verhalten mit isolierten zyklischen Referenzen?

7

Wenn zwei Objekte auf dem Heap aufeinander verweisen, die aber nicht mit einer Referenzvariablen verknüpft sind, sind diese Objekte dann für die Garbage Collection geeignet?

    
Warrior 09.01.2009, 07:52
quelle

3 Antworten

20

Ja, das sind sie. Im Wesentlichen geht der GC von "bekannten Wurzeln" (statischen Variablen, lokalen Variablen von allen Stapelrahmen in all-threads), um Objekte zu finden, die nicht als Müll gesammelt werden können. Wenn es keine Möglichkeit gibt, von einem Stamm zu einem Objekt zu gelangen, kann es gesammelt werden.

EDIT: Tom hat darauf hingewiesen, was ich für wert hielt, in die Antwort selbst aufgenommen zu werden:

  

Technisch sind statische Variablen nicht   Wurzeln - sie sind durch Klassen referenziert   welche durch Klassenlader referenziert werden   welche durch Klassen referenziert werden   sind durch Objekt referenziert, die sind   referenziert durch Wurzelreferenzen.

Der Unterschied ist wahrscheinlich irrelevant am meisten der Zeit, aber es ist gut zu wissen:)

    
Jon Skeet 09.01.2009, 07:57
quelle
5

Überprüfen Sie Folgendes: Wie behandelt Java Garbage Collector Selbstreferenzen .

Vielleicht möchten Sie java.lang.ref.WeakReference     

Hosam Aly 09.01.2009 07:56
quelle
4

Skeet ist wie immer auf das Geld angewiesen. Ich würde nur hinzufügen, dass die Situation, die Sie beschreiben, der Grund dafür ist, dass das Referenzzählen (eine Standardstrategie mit frühen C ++ - Smartpointern) nicht verwendet wird.

    
Jim Nelson 09.01.2009 08:12
quelle

Tags und Links