Kann eine Referenz auf eine Annotation das Freigeben des Objektes (GC) verhindern?

DarthShader

Erfahrenes Mitglied
Hallo,

ist es möglich, dass eine Referenz auf eine Annotation A, die z.B. an einer Methode eines Objektes O hängt, verhindert, dass O vom Garbage Collector weggeräumt wird?

Nehmen wie an, das Objekt hat folgende Methode:

Java:
@MyAnnotation
public void getFoo() {
  // ...
}

Wenn ich mir nun irgendwo eine Referenz auf diese Annotation @MyAnnotation hole (alle Annotations in Java implementieren ja "java.lang.annotation.Annotation") und halte, es aber keine Referenz auf das Objekt O mehr gäbe, würde das Objekt O dann vom GC freigegeben werden können?

Meiner Ansicht nach ja, weil die Annotation keine Referenz auf das Objekt hat, nur umgekehrt (irgendeine Art von JVM interner Referenz vermute ich, da stecke ich aber nicht tief genug drin) - ich möchte nur sichergehen :)

Danke für Eure Hilfe!
 
Hallo,

Annotation hängen nicht an einer Instanz sondern an deren Typ (Class) von daher sind Instanzen nicht direkt mit Annotations assoziiert. Deshalb würde ich sagen, dass die Annotations die Instanzen nicht festhalten. Btw. Annotations werden übrigens über DynamicProxies realisiert.

Gruß Tom
 
Hallo Thomas,

hm ja, ich habe nicht daran gedacht, dass Annotation an den Typen sitzen, nicht an den Instanzen; von daher denke ich auch, dass das ein Wegräumen eines Objektes nicht verhindert.

Danke!
 
Zurück