Sobes.tech
Junior

Объектҳо дар ёддошт дар куҷо нигоҳ дошта мешаванд?

sobes.tech AI

Ҷавоб аз AI

Объектҳо дар ёддошт дар heap нигоҳ дошта мешаванд.

Heap як минтақаи ёддоштест, ки ба таври динамикӣ тақсим мешавад, ва дар он объектҳо дар вақти иҷрои барнома ҷойгир мешаванд. Андозаи объектҳо пешакӣ маълум нест ва онҳо аз ҷониби ҷамъкунандаи партовҳо (garbage collector) тоза карда мешаванд.

Типҳои додаҳои примиавӣ (суммаҳои бутун, арзишҳои булеан ва ғайра) одатан дар stack нигоҳ дошта мешаванд. Stack як минтақаи ёддоштест, ки ба таври статикӣ тақсим шудааст, ва барои нигоҳдории тағйирёбандаҳои маҳаллӣ ва маълумот дар бораи даъвати функсияҳо истифода мешавад, ва худкор идора карда мешавад.

Референсҳо ба объектҳо (яъне, суроғаҳо дар heap) дар stack ё дар дигар объектҳо дар heap нигоҳ дошта мешаванд.

Масалан дар Java:

// Тағйирёбандаи типи примиавӣ (int) дар stack нигоҳ дошта мешавад.
int count = 10;

// Тағйирёбандаи ишора (myObject) дар stack нигоҳ дошта мешавад.
// Объекти MyObject худ дар heap сохта мешавад.
MyObject myObject = new MyObject();

// Типи примиавӣ дар дохили объект (id) ҳамчун қисми объект дар heap нигоҳ дошта мешавад.
myObject.setId(1);

// Ишора ба объекти дигар (anotherObject) дар дохили myObject
// ҳамчун қисми myObject дар heap нигоҳ дошта мешавад. AnotherObject худ дар heap аст.
myObject.setRelatedObject(new AnotherObject());

class MyObject {
    private int id; // дар heap нигоҳ дошта мешавад ( ҳамчун қисми MyObject)
    private AnotherObject relatedObject; // ишора дар heap

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

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

class AnotherObject {
    // ...
}

Хулоса:

  • Stack: Типҳои примиавӣ, ишораҳо ба объектҳо.
  • Heap: Объектҳо, ки дар бар мегиранд майдонҳои худ (аз ҷумла, типҳои примиавӣ дар дохили объектҳо ва ишораҳо ба дигар объектҳо).