Java (Spring Boot) İleri Seviye JVM & Bellek

JVM Bellek Modeli: Heap, Stack, Metaspace & GC (G1 vs ZGC)

Java kodunuzun işletim sisteminde nasıl yer kapladığı ve çöplerin nasıl toplandığı.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Stack masanızın üstündeki not defteridir (metot bittiğinde sayfa yırtılır atılır). Heap ise ofisin ortak deposudur (bütün büyük kutular orada durur). Metaspace ise kütüphanedir (sınıf tanımları orada saklanır).

Teknik & Mimari Tanım

Stack: Her thread için özeldir, ilkel tipleri ve nesne referanslarını tutar. Heap: Tüm thread'lerin paylaştığı nesnelerin tutulduğu alandır (Young/Old gen). Metaspace: Class metadata'larını tutar. G1 GC dengeli bir toplayıcıyken, ZGC (Z Garbage Collector) duraklama sürelerini (STW - Stop The World) 1 milisaniyenin altına indirir.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“Stack LIFO mantığında çalışır ve çok hızlıdır. Heap dinamik tahsis edilen nesneleri barındırır. Modern Java'da (Java 17+) G1GC varsayılandır; mikrosaniye seviyesinde ultra-düşük gecikme (low-latency) gerektiren fintech projelerinde ise ZGC tercih edilir.”

Java (Spring Boot) Örnek Uygulaması
// VM Parametreleri ile GC Seçimi:
// java -XX:+UseZGC -Xms4g -Xmx4g -jar app.jar

public class MemoryDemo {
    public void test() {
        int x = 10; // Stack
        User u = new User(); // u referansı Stack, new User() nesnesi Heap!
    }
}
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

Statik koleksiyonlara (List, Map) sürekli nesne ekleyip temizlememek; bu nesneler GC root tarafından tutulduğu için OutOfMemoryError (OOM) verir.