C'est faut. Le garbage collector n'a aucun problème avec les références cyclique. Il faut qu'il existe un chemin de hard références depuis une zone non nettoyable (stack, classes, threads, frames visibles, sockets réseau actives, etc). deux objets qui se référencent mutuellement sans être référencé ailleurs seront nettoyés.
En lui même le mot clé final n'a pas beaucoup d'influence. Ce qui en as, c'est ce que tu fait de la variable après. Dans ton cas, tu la référence depuis une inner class, celle-ci lors de sa construction recevra alors copie de la référence. Tant que l'instance de cette inner class ne sera pas collectable, à la fois l'instance de ta classe entourante ne le sera pas (l'inner class référence d'office l'instance de la outer class, sauf si elle est static), et l'instance de Object ne le sera pas.
Le listener sera garbage collectable lorsque monAttributDeMaClasseAQuiAdmetUnListenerXXX le sera. Celui là même, a priori, le sera quand MaClasseA le sera (sauf si tu référence aussi l'attribute ailleurs). Donc tout se résumera, a priori, au déréférencement de ton instance de MaClasseA
Partager