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