Junior — Middle
Quand le système nettoie-t-il l'objet référencé par WeakReference lors de son processus de fonctionnement?
sobes.tech IA
Réponse de l'IA
L'objet auquel fait référence WeakReference devient candidat à la collecte des déchets lorsque toutes les références fortes à celui-ci ont disparu. À ce moment-là, le ramasse-miettes peut nettoyer l'objet, même s'il existe une référence faible.
C'est-à-dire que le nettoyage de l'objet se produit lors de l'exécution de la collecte des déchets si :
- Il n'y a aucune référence forte à l'objet.
- Il n'y a que des références faibles (
WeakReference), qui n'empêchent pas la collecte des déchets.
Après le nettoyage de l'objet, WeakReference.get() renverra null.
Exemple :
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef existe, l'objet ne sera pas collecté
println(weakRef.get()) // SomeObject
// On supprime la référence forte
strongRef = null
// Après la collecte des déchets, l'objet peut être nettoyé
System.gc()
println(weakRef.get()) // null, si l'objet a été collecté
Ainsi, le nettoyage se produit au moment de la collecte des déchets si l'objet n'est pas maintenu par des références fortes.