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:
-
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.
-
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.
-
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.
- Yüklenmiş sınıflar hakkında bilgileri depolar:
-
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) |