Hoe bepaal je welk object in Java afval is?
sobes.tech AI
Antwoord van AI
Een object wordt in Java als afval beschouwd wanneer er geen verwijzingen meer naar zijn vanuit de actieve delen van het programma. Dit gebeurt in de volgende gevallen:
-
Geen verwijzingen vanuit de root-objecten (root-referenties): Root-objecten omvatten verwijzingen vanuit:
- Lokale variabelen in actieve threads.
- Statistische variabelen.
- JNI-referenties (objecten die toegankelijk zijn vanuit native code).
-
Alleen verwijzingen vanuit andere "afval"-objecten: Zelfs als object O1 verwijst naar object O2, maar noch O1, noch O2 hebben verwijzingen vanuit root-objecten, worden beide objecten als afval beschouwd.
Voorbeeld:
// Root-referentie vanuit een statische variabele
static Object staticObject = new Object();
// Root-referentie vanuit een lokale variabele in een actieve methode
public void someMethod() {
Object localObject = new Object(); // Referentie vanuit een lokale variabele
// Na het verlaten van someMethod wordt localObject niet meer toegankelijk
}
// Voorbeeld van een "afval"-object
public Object createGarbage() {
Object obj1 = new Object();
Object obj2 = new Object();
obj1 = obj2; // obj1 verwijst nu naar hetzelfde object als obj2
// Het originele object waar obj1 naar verwees, is nu niet meer toegankelijk en wordt als afval beschouwd
return obj2; // Geeft de verwijzing naar een levend object terug
}
De garbage collector in Java bepaalt onbereikbare objecten met behulp van het "bereik-tracering"-algoritme, beginnend bij de root-objecten. Objecten die niet via een referentieketen vanaf de root-objecten bereikbaar zijn, worden als onbereikbaar beschouwd en worden verzameld.