Bölüm 4 · Simülatör

Yığın ve Heap Gezgini

← Bölüm 4
Doğru 0 / 0

Java kodu

    Bellek

    Çıktı (konsol)

    Yığın ve Heap Gezgini

    Amaç: Java'da değişkenlerin ve nesnelerin bellekte nerede durduğunu görmek. Her metot çağrısı yığında bir çerçeve açar; yerel değişkenler ve parametreler bu çerçevede yaşar. new ile oluşturulan her nesne heap'tedir. Sınıf tipindeki bir değişken nesnenin kendisini değil, ona giden referansı (oku) tutar.

    Nasıl kullanılır?

    1. Soldaki listeden bir program seçin.
    2. Adım ▶ / ◀ (klavyede → / ←), Oynat, Sıfırla. Sarı satır şu an çalışan satırdır; bellekte son değişen değer ve ok kırmızı vurgulanır.
    3. Kendini dene açıkken çıktıyı ve çöp toplanabilecek nesneleri tahmin edersiniz; doğru sayısı üstte tutulur.

    Görünüm

    • Sol sütun yığındır: en altta main, en üstte (kırmızı çerçeveli) şu an çalışan metot. Yapıcı çalışırken kendi çerçevesinde this referansı görünür.
    • Sağda heap: her nesne sınıf adı ve sıra numarasıyla (#1, #2…) gösterilir. Numaralar yalnızca anlatım içindir; Java nesne adresini göstermez.
    • Kesik çizgili soluk nesne: hiçbir canlı referansla ulaşılamıyor, yani çöp toplamaya uygun. Çöp toplayıcının onu ne zaman sileceği belli değildir; ama programın ona bir daha erişme yolu yoktur.

    Hatırlatma

    • b = a; nesneyi değil referansı kopyalar: iki değişken aynı nesneyi gösterir (takma ad). Birinden yapılan değişiklik ötekinden de görünür.
    • Java her şeyi değere göre aktarır; referans tipinde aktarılan değer referanstır. Metot nesnenin alanlarını değiştirebilir, ama parametreye yeni nesne atamak çağıranın değişkenini değiştirmez.
    • Nesne dizisinin öğeleri referanstır ve başlangıçta null olur; null üzerinden alan ya da metot kullanmak NullPointerException fırlatır.
    • Başka nesneleri gösteren bir nesne de, kendisine ulaşan yol kalmadıysa çöp toplamaya uygundur.

    Programların çıktıları javac --release 8 ile derlenip Java 8 üzerinde çalıştırılarak doğrulanmıştır.

    İlgili sunum: Bölüm 4 · Nesne ve Sınıflar (Referanslar, new Araba(...): Adım Adım, Referans Atama, null ve NullPointerException).