Sobes.tech
Middle

Kā noteikt, kurš objekts Java ir atkritumi?

sobes.tech AI

Atbilde no AI

Objekts Java valodā tiek uzskatīts par atkritumiem, ja no aktīvajām programmas daļām vairs nav atsauces uz to. Tas notiek šādos gadījumos:

  • Nav atsauces no saknes objektiem (saknes atsauces): Saknes objekti ietver atsauces no:

    • Aktīvo pavedienu vietējām mainīgajām.
    • Statiskajām mainīgajām.
    • JNI atsaucēm (objektiem, kas pieejami no nativkoda).
  • Tikai no citiem "atkritumu" objektiem atsaucēm: Pat ja objekts O1 atsaucas uz objektu O2, bet ne O1, ne O2 nav atsauces no saknes objektiem, abi objekti tiek uzskatīti par atkritumiem.

Piemērs:

// Saknes atsauce no statiskas mainīgās
static Object staticObject = new Object();

// Saknes atsauce no vietējās mainīgās aktīvā metodē
public void someMethod() {
    Object localObject = new Object(); // Atsauce no vietējās mainīgās
    // Pēc someMethod iziešanas localObject kļūst nepieejams
}

// "Atkritumu" objekta piemērs
public Object createGarbage() {
    Object obj1 = new Object();
    Object obj2 = new Object();
    obj1 = obj2; // obj1 tagad atsaucas uz to pašu objektu kā obj2
    // Oriģinālais objekts, uz kuru atsaucās obj1, tagad ir nepieejams un tiek uzskatīts par atkritumu
    return obj2; // Atgriež dzīvā objekta atsauci
}

Java atkritumu savācējs nosaka nepieejamos objektus, izmantojot "pieejamības sekošanas" (reachability tracing) algoritmu, sākot no saknes objektiem. Objekti, uz kuriem nav iespējams nokļūt caur atsauču ķēdi no saknes objektiem, tiek uzskatīti par nepieejamiem un tiek savākti.