Sobes.tech
Middle+

როგორ არის მოწყობილი მეხსიერება JVM-ში?

sobes.tech AI

პასუხი AI-სგან

JVM-ის მეხსიერება ნაწილდება შემდეგი მონაცემთა სფეროებად:

  • Heap (კუნძული): მეხსიერების სფერო, სადაც ინახება კლასების ობიექტები და მასივები. საერთოა ყველა ნაკადისთვის. მართავს გარბეჯის კრეკერი. შედგება თაობებისგან (Young, Old, Permanent/Metaspace).
  • Stack (სტეკი): მეხსიერების სფერო თითოეული JVM ნაკადისათვის. ინახავს ლოკალურ ცვლადებს, მეთოდების პარამეტრებს და სტეკის ფრეიმის ინფორმაციას თითოეული მეთოდის გამოძახებისთვის. მეთოდის დასრულებისას მისი ფრეიმი ამოიღება სტეკიდან.
  • Method Area (მეთოდების ტერიტორია): ინახავს კლასების მეტადატას, ბაიტკოდებს, კონსტანტების პულს, სტატიკურ ცვლადებს. ძველ ვერსიებში სახელდებოდა Permanent Generation, ახალი (Java 8+) - Metaspace-ით შეიცვალა.
  • PC Registers (კომანდების გამოთვლელები): თითოეული ნაკადისათვის. ინახავს შემდეგი ინსტრუქციის მისამართს, რომელიც უნდა შესრულდეს.
  • Native Method Stacks (ნატივი მეთოდების სტეკები): ინახავს ნატივი (Java-ს არა) მეთოდების გამოძახებებს. იყენებს იმ ნატივი ბიბლიოთეკებს, რომლებიც აპლიკაცია იძახის.

მეხსიერების განაწილება Heap-ში პასუხისმგებელია გარბეჯის კრეკერი. ის ავტომატურად ანთავისუფლებს მეხსიერებას იმ ობიექტებიდან, რომლებსაც აქტიური რჩევები არ აქვთ.

მაგალითი Heap და Stack-ის მუშაობის:

// ობიექტი 'obj' შექმნილია Heap-ში.
Object obj = new Object();

// ადგილობრივი ცვლადი 'i' ინახება Stack-ში.
int i = 10;

public void myMethod(int param) { // პარამეტრი param - ამ მეთოდის ფრეიმის Stack-ში.
    // ადგილობრივი ცვლადი 'local' - ამ მეთოდის ფრეიმის Stack-ში.
    String local = "hello";
    // ახალი ობიექტი შექმნილია Heap-ში. მისამართი - ამ მეთოდის ფრეიმის Stack-ში.
    MyClass myObj = new MyClass();
}

Heap და Stack-ის შორის განსხვავება:

  • Heap: საერთო ყველა ნაკადისთვის, ინახავს ობიექტებს, მართავს GC.
  • Stack: ინდივიდუალური ნაკადისათვის, ინახავს პრიმიტივებს და ობიექტების რჩევებს, მართავს მეთოდის ფრეიმები.

მეხსიერების მართვა:

  • განაწილება (Allocation) - ობიექტების შექმნისას.
  • დეალოკაცია (Deallocation) - არასაჭირო ობიექტების მეხსიერების გათავისუფლება (გარბიჯის კრეკერი).
  • მეხსიერების ოპტიმიზაცია.