Sobes.tech
Middle

Ako určiť, ktorý objekt v Jave je odpad?

sobes.tech AI

Odpoveď od AI

Objekt sa považuje za odpad v Javi, kadar na njega ni več ni referenc iz aktivnih delov programa. To se zgodi v naslednjih primerih:

  • Ni referenc iz korenskih objektov (referenc iz korena): Korenski objekti vključujejo reference iz:

    • Lokalnih spremenljivk v aktivnih nitih.
    • Statističnih spremenljivk.
    • JNI referenc (objektov, dostopnih iz nativnega kode).
  • Samo reference iz drugih "odpadnih" objektov: Tudi če objekt O1 referencira na objekt O2, vendar noben od O1 ali O2 nima referenc iz korenskih objektov, sta oba objekta štejejo za odpad.

Primer:

// Korenski referenca iz statične spremenljivke
static Object staticObject = new Object();

// Korenski referenca iz lokalne spremenljivke v aktivni metodi
public void someMethod() {
    Object localObject = new Object(); // Referenca iz lokalne spremenljivke
    // Po izhodu iz someMethod, localObject postane nedostopen
}

// Primer "odpadnega" objekta
public Object createGarbage() {
    Object obj1 = new Object();
    Object obj2 = new Object();
    obj1 = obj2; // obj1 zdaj referencira isti objekt kot obj2
    // Originalni objekt, na katerega je referenciral obj1, je zdaj nedostopen in šteje za odpad
    return obj2; // Vrne referenco na živi objekt
}

Garbage collector v Javi določa nedostopne objekte z uporabo algoritma "sledenja dostopnosti" (reachability tracing), ki se začne od korenskih objektov. Objekti, do katerih ni mogoče priti preko verige referenc od korenskih objektov, štejejo za nedostopne in so primerni za zbiranje.