Sobes.tech
Middle

Java'da bellek nasıl yapılandırılmıştır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da bellek otomatik olarak çöp toplayıcı tarafından yönetilir ve birkaç bölüme ayrılır:

  1. Heap (Yığın):

    • Sınıf nesneleri ve dizileri depolar.
    • Uygulamadaki tüm akışlar için tek bir alan.
    • Çöp toplayıcı bu alanla çalışır.
    • Nesiller (Genç, Eski, Kalıcı) halinde bölünmüştür.
  2. Stack (Yığın):

    • Her akışın kendi yığını vardır.
    • Yerel değişkenler ve nesnelere referanslar depolar.
    • Veriler LIFO (Son Giren İlk Çıkar) prensibiyle eklenir ve kaldırılır.
    • Metod tamamlandığında otomatik olarak serbest bırakılır.
  3. Method Area (Metot Alanı) / PermGen (Java 8'e kadar) / Metaspace (Java 8 ve sonrası):

    • Yüklenmiş sınıflar hakkında bilgileri depolar:
      • Sınıf meta verileri.
      • Metotların bayt kodu.
      • Statik değişkenler.
      • Sabitler havuzu.
    • PermGen boyutu sabitti, Metaspace yerel belleği kullanır ve dinamik olarak genişleyebilir.
  4. Native Method Stacks (Yerel Metot Yığınları):

    • Yerel metod çağrıları için kullanılır (örneğin, C/C++).
    • Yerel metod tamamlandığında serbest bırakılır.
// Bellek kullanımı örneği
public class MemoryExample {

    private String instanceVariable; // Heap'te saklanır

    public void myMethod(int parameter) { // parameter Stack'te saklanır

        int localVar = 10; // localVar Stack'te

        String localString = "hello"; // "hello" String Havuzunda (Heap/Method Area kısmı), localString referansı Stack'te

        Object obj = new Object(); // Object Heap'te, obj referansı Stack'te

        Integer wrapper = new Integer(5); // Integer Heap'te, wrapper referansı Stack'te
    }

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

Bellek alanları ve içerikleri:

Alan Nerede bulunur? Ne depolar? Yönetim
Heap JVM ile paylaşılan Nesneler, diziler Çöp toplayıcı
Stack Her thread'e özel Yerel primitif değişkenler, nesnelere referanslar Otomatik (metod sonunda)
Method Area JVM ile paylaşılan Sınıf meta verileri, statik değişkenler, bayt kodu, sabitler Çöp toplayıcı (sınıflar ve statikler için)
Native Stacks Her thread'e özel (çağrıldığında) Yerel metodların değişkenleri ve verileri Otomatik (yerel metod sonunda)