GC + static + weakreference
Bonjour,
Je viens de recuperer une application et je me rend compte que les finalize ne sont pas du tout appele lors de la destruction de certains objets.
Quelles pourraient etre les raisons de ce "non-appel"?
J'ai suppose que cela viendrait des objets statiques presents dans ces classes.
Comme l'objet static n'est pas vide, alors il n'appelle pas le finalize.
Mais si c'est bien cela, alors, j'ai un paquet d'objet static a vider...
J'ai aussi vu des choses sur les weak reference mais je n'ai pas bien compris l'utilite...
Merci!
GarbageCollect with java.lang.ref!
Citation:
Envoyé par Sanguko
(...)
Une WeakReference est une référence particuliere, qui n'empeche pas l'objet d'être libéré. C'est a dire que s'il n'y a plus de references directes sur ton objet, il va être libéré. Mais tu ne maitrise pas le moment ou il va être libéré (ca depend du type de WeakReference)
Utiliser une WeakReference necessite une modification dans le code (pas seulement le type, mais également à chaque utilisation). Ce qui est sans doute plus compliqué que de mettre les references static à null.
Je pense que tu maîtrises le moment de libération de l'adresse mémoire. C'est pourquoi il existe une liste d'attente ((ReferenceQueue)refQueue).poll() dans le package ref. Et surtout lors de l'appel sur la liste, c'est comme la poste il faut appeler encore la méthode ((Reference)ref).clear() de Reference pour s'assurer de la libération de l'adresse.
Seulement, faites attention au GarbageCollector, il n'est pas possible de le contrôler en continu, car il se bloquerait immédiatement vu les resources System qu'il utilise déjà!
Aussi, System.gc() est à prendre avec des pincettes à linge...:mouarf3: