Heap ve stack
- Java kursu
- Uzman
- Ders 7/46
- 5 dk
Heap ve stack bellek bölgelerini öğrenirsin.
Heap ve stack
JVM belleği iki temel bölgeye ayırır. Yığın (stack) her yöntem çağrısı için ayrılır; yerel ilkel değişkenler ve nesne başvuruları burada tutulur. Öbek (heap) ise new ile oluşturulan tüm nesneler için kullanılır ve uygulamaya geneldir.
Örnek: int x = 5 yığında, Box b = new Box() ifadesinde b başvurusu yığında, nesnenin kendisi öbekte durur. Yığın yöntem bitince boşalır; öbek çöp toplayıcıya (garbage collector) kalır.
Başvuru ve nesne ayrımı
Bir değişken nesnenin kendisini değil, ona bir başvuruyu tutar. Başvuru yığında, nesne öbekte yaşar. İki değişken aynı nesneyi gösterebilir.
Örnek: Box a = new Box(); Box b = a;. Burada a ve b aynı öbek nesnesine başvurur; a.v = 9 değişikliği b.v üzerinden de görünür. İlkel türler ise doğrudan değerlerini yığında tutar; atama kopyalar. Bu ayrım, yan etki ve kopyalama davranışını belirler.
Uygulama Yığın ve öbeği birlikte kullan
Bir Box sınıfı tanımla: int v alanı ve Box(int v) kurucusu olsun. static int square(int n) yöntemi n * n döndürsün. main içinde int x = 5 tanımla, new Box(x) ile bir nesne oluştur ve square(b.v) sonucunu System.out.println ile yazdır.
Başlangıç kodu
// Box sınıfını tanımla
// kare alma yöntemini ekle
// main içinde sonucu yazdırÖrnek çözüm
class Box {
int v;
Box(int v) { this.v = v; }
}
public class MemoryDemo {
static int square(int n) { return n * n; }
public static void main(String[] args) {
int x = 5;
Box b = new Box(x);
System.out.println(square(b.v));
}
}Beklenen çıktı
25
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 new ile oluşturulan nesne hangi bellek bölgesinde durur?
- Yığında
- Metaspace'te
- Kayıt dizisinde
- Öbekte Doğru cevap
Açıklama: new ile oluşturulan nesneler öbekte yaşar.
2 Nesne oluşturma işlecini tamamla
Box b = ____ Box(5);
Box b = new Box(5);
Açıklama: new işleci öbekte nesne oluşturur.
3 Bellek bölgelerini eşleştir
| Kavram | Anlamı |
|---|---|
Öbek |
new ile nesneler |
Yığın |
Yerel değişkenler |
Metaspace |
Sınıf metadata'sı |