Sobes.tech
Middle

Java-da yaddaş necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da yaddaş avtomatik olaraq toplayıcı tərəfindən idarə olunur və bir neçə sahəyə bölünür:

  1. Heap (Yığın):

    • Sinif obyektləri və massivləri saxlayır.
    • Tətbiqin bütün axınları üçün bir sahə.
    • Yaddaş toplayıcı bu sahə ilə işləyir.
    • Nəsil (Gənc, Köhnə, Daimi) şəklində bölünür.
  2. Stack (Yığım):

    • Hər axın öz yığınına malikdir.
    • Yerli dəyişənlər və obyektlərə istinadlar saxlayır.
    • Məlumatlar LIFO (Son daxil olan, ilk çıxarılır) prinsipi ilə əlavə və silinir.
    • Metod tamamlandıqda avtomatik sərbəst buraxılır.
  3. Method Area (Metod Sahəsi) / PermGen (Java 8-ə qədər) / Metaspace (Java 8-dən sonra):

    • Yüklənmiş siniflər haqqında məlumatları saxlayır:
      • Sinif meta məlumatları.
      • Metodların bayt kodu.
      • Statik dəyişənlər.
      • Sabitlər hovuzu.
    • PermGen ölçüsü sabit idi, Metaspace nativ yaddaş istifadə edir və dinamik olaraq genişlənə bilər.
  4. Native Method Stacks (Nativ metod yığınları):

    • Nativ metod çağırışları üçün istifadə olunur (məsələn, C/C++).
    • Nativ metod tamamlandıqda sərbəst buraxılır.
// Yaddaş istifadəsinin nümunəsi
public class MemoryExample {

    private String instanceVariable; // Heap-də saxlanılır

    public void myMethod(int parameter) { // parameter Stack-də saxlanılır

        int localVar = 10; // localVar Stack-də

        String localString = "hello"; // "hello" String Pool-da (Heap/Method Area hissəsi), localString istinadı Stack-də

        Object obj = new Object(); // Object Heap-də, obj istinadı Stack-də

        Integer wrapper = new Integer(5); // Integer Heap-də, wrapper istinadı Stack-də
    }

    public static void main(String[] args) {
        MemoryExample example = new MemoryExample();
        example.myMethod(20);
    }
}

Yaddaş sahələri və onların məzmunu:

Sahə Harada yerləşir? Nə saxlayır? İdarəetmə
Heap JVM ilə paylaşılır Obyektlər, arraylər Garbage Collector
Stack Hər thread üçün özəl Yerli primitiv dəyişənlər, obyektlərə istinadlar Avtomatik (metod sonunda)
Method Area JVM ilə paylaşılır Sinif meta məlumatları, statik dəyişənlər, bayt kodu, sabitlər Garbage Collector (siniflər və statiklər üçün)
Native Stacks Hər thread üçün özəl (çağırış zamanı) Nativ metodların dəyişənləri və məlumatları Avtomatik (metod sonunda)