JVM bellek alanları nelerdir? Heap, stack ve metaspace farkı nedir; hangi OutOfMemoryError türlerini görürsünüz?

Cevap

JVM belleği temelde heap (tüm thread'lerin paylaştığı nesne alanı), thread başına stack ve sınıf meta verisinin tutulduğu metaspace olarak ayrılır.

AlanNe tutarPaylaşımTipik hata
Heapnew ile oluşan nesneler, dizilerTüm thread'lerOutOfMemoryError: Java heap space
StackMetot çağrı frame'leri, lokal primitive'ler, referanslarThread başınaStackOverflowError (derin/sonsuz recursion)
MetaspaceSınıf tanımları, metot meta verisi (Java 8+, native bellek)Tüm JVMOutOfMemoryError: Metaspace (classloader leak)
Direct / nativeNIO ByteBuffer.allocateDirect, thread'lerin kendisiTüm JVMDirect buffer memory, unable to create native thread

Heap ayrıca young generation (Eden + Survivor) ve old generation olarak bölünür; çoğu nesne genç ölür, GC bu varsayıma göre çalışır.

Önemli ayarlar

java -Xms512m -Xmx2g \
     -XX:MaxMetaspaceSize=256m \
     -Xss1m \
     -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp \
     -jar app.jar

Container içinde -Xmx sabitlemek yerine -XX:MaxRAMPercentage=75 kullanmak yaygındır; modern JVM'ler (10+) cgroup limitlerini algılar.

Bellek sızıntısı nasıl araştırılır?

  1. Heap dump alın (jcmd <pid> GC.heap_dump /tmp/heap.hprof).
  2. Eclipse MAT veya VisualVM ile "dominator tree"ye bakın.
  3. Tipik suçlular: büyüyen statik Map cache'leri, kapatılmayan kaynaklar, ThreadLocal'ların thread pool'larda temizlenmemesi.
  1. Java 21 virtual thread'ler nedir? Platform thread'lerden farkı nedir ve hangi durumlarda dikkatli olmak gerekir?OrtaJava & SpringBackend
  2. ExecutorService ve CompletableFuture ile asenkron iş nasıl yapılır? Thread pool boyutunu nasıl belirlersiniz?OrtaJava & SpringBackend
  3. JPA/Hibernate'te lazy ve eager loading farkı nedir? LazyInitializationException neden oluşur ve nasıl çözülür?OrtaJava & SpringBackend
  4. @Transactional anotasyonu hangi durumlarda çalışmaz? Self-invocation, rollback kuralları ve propagation tuzaklarını açıklayın.ZorJava & SpringBackend
  5. Spring bean scope'ları nelerdir? Singleton bir bean'e prototype bean inject edilirse ne olur?KolayJava & SpringBackend
  6. Spring'de Dependency Injection nedir? Constructor injection neden field injection'a tercih edilir?KolayJava & SpringBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle