Sobes.tech
Junior

Kde sa v pamäti ukladajú objekty?

sobes.tech AI

Odpoveď od AI

Objekty v pamäti sa ukladajú do zásobníka (stack).

Zásobník je staticky pridelená oblasť pamäti, ktorá sa používa na ukladanie lokálnych premenných a informácií o volaniach funkcií, a je automaticky spravovaná.

Objekty sa ukladajú do heap-u (hromady), čo je dynamicky pridelená oblasť pamäti, kde sa objekty umiestňujú počas behu programu. Veľkosť objektov nie je vopred známa a sú odstránené garbage collector-om.

Primitívne dátové typy (celé čísla, boolean hodnoty atď.) sa zvyčajne ukladajú do zásobníka (stack). Referencie na objekty (t.j. adresy v heap-u) sa ukladajú do zásobníka alebo do iných objektov v heap-u.

Príklad v Jave:

// Premenná primitivného typu (int) sa ukladá do zásobníka.
int count = 10;

// Referenčná premenná (myObject) sa ukladá do zásobníka.
// Samotný objekt MyObject sa vytvára v heap-u.
MyObject myObject = new MyObject();

// Primitívny typ vo vnútri objektu (id) sa ukladá ako časť objektu v heap-u.
myObject.setId(1);

// Referencia na iný objekt (anotherObject) vo vnútri myObject
// sa ukladá ako časť myObject v heap-u. AnotherObject je tiež v heap-u.
myObject.setRelatedObject(new AnotherObject());

class MyObject {
    private int id; // uložené v heap-u (ako časť MyObject)
    private AnotherObject relatedObject; // referencia uložená v heap-u

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

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

class AnotherObject {
    // ...
}

Zhrnutie:

  • Zásobník (stack): Primitívne typy, referencie na objekty.
  • Heap: Samotné objekty, obsahujúce svoje polia (vrátane primitívnych typov vnútri objektov a referencií na iné objekty).