Comment déterminer quel objet en Java est une poubelle?
sobes.tech IA
Réponse de l'IA
Un objet est considéré comme déchet en Java lorsqu'il n'y a plus de références à celui-ci depuis les parties actives du programme. Cela se produit dans les cas suivants :
-
Pas de références depuis les objets racine (références racine) : Les objets racine incluent des références depuis :
- Variables locales dans des threads actifs.
- Variables statiques.
- Références JNI (objets accessibles depuis du code natif).
-
Références uniquement depuis d'autres objets "déchet" : Même si l'objet O1 référence l'objet O2, mais ni O1 ni O2 n'ont de références depuis les objets racine, les deux objets sont considérés comme déchet.
Exemple :
// Référence racine depuis une variable statique
static Object staticObject = new Object();
// Référence racine depuis une variable locale dans une méthode active
public void someMethod() {
Object localObject = new Object(); // Référence depuis une variable locale
// Après la sortie de someMethod, localObject n'est plus accessible
}
// Exemple d'objet "déchet"
public Object createGarbage() {
Object obj1 = new Object();
Object obj2 = new Object();
obj1 = obj2; // obj1 référence maintenant le même objet que obj2
// L'objet original référencé par obj1 n'est plus accessible et est considéré comme déchet
return obj2; // Retourne la référence à un objet vivant
}
Le ramasse-miettes en Java détermine les objets inaccessibles en utilisant l'algorithme de "suivi de la reachabilité", en commençant par les objets racine. Les objets qui ne peuvent pas être atteints par une chaîne de références depuis les objets racine sont considérés comme inaccessibles et sont éligibles pour la collecte.