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: თვითონ ობიექტები, რომლებიც შეიცავენ თავიანთ ველებს (შიგნით პრიმიტიული ტიპები და მითითებები სხვა ობიექტებზე).