Sobes.tech
Junior

Kde jsou objekty uloženy v paměti?

sobes.tech AI

Odpověď od AI

Objekty v paměti jsou uloženy v haldě (heap).

Haldina je dynamicky alokovaná oblast paměti, kam jsou během běhu programu umisťovány objekty. Velikost objektů není předem známa a jsou odstraňovány garbage collectorem.

Primitivní datové typy (celá čísla, logické hodnoty atd.) jsou obvykle uloženy na zásobníku (stack). Zásobník je staticky přidělená oblast paměti, která slouží k ukládání lokálních proměnných a informací o volání funkcí, a je automaticky spravována.

Odkazy na objekty (tedy adresy v haldě) jsou uloženy na zásobníku nebo v jiných objektech v haldě.

Příklad v Javě:

// Proměnná primitivního typu (int) je uložena na zásobníku.
int count = 10;

// Referenční proměnná (myObject) je uložena na zásobníku.
// Samotný objekt MyObject je vytvořen v haldě.
MyObject myObject = new MyObject();

// Primitivní typ uvnitř objektu (id) je uložen jako součást objektu v haldě.
myObject.setId(1);

// Odkaz na jiný objekt (anotherObject) uvnitř myObject
// je uložen jako součást myObject v haldě. AnotherObject je také v haldě.
myObject.setRelatedObject(new AnotherObject());

class MyObject {
    private int id; // uložen v haldě (jako součást MyObject)
    private AnotherObject relatedObject; // odkaz uložen v haldě

    public void setId(int id) {
        this.id = id;
    }

    public void setRelatedObject(AnotherObject relatedObject) {
        this.relatedObject = relatedObject;
    }
}

class AnotherObject {
    // ...
}

Shrnutí:

  • Zásobník (stack): Primitivní typy, odkazy na objekty.
  • Hald (heap): Samotné objekty, obsahující svá pole (včetně primitivních typů uvnitř objektů a odkazů na jiné objekty).