hakantopuzoglu
- 25 May 2018
- 2,239 Mesaj
- TIM Görevleri
- 1
Aktiflik
Seviye
Deneyim
Java’da Bellek Sızıntısı (Memory Leak) Nasıl Bulunur?
Herkese Merhaba,
Java’da en sık karşılaşılan performans sorunlarından biri **Memory Leak** (Bellek Sızıntısı)dır. Heap memory sürekli artar, Garbage Collector daha sık çalışır ve sonunda OutOfMemoryError alırsınız.
Bu rehberde bellek sızıntısını nasıl tespit edeceğinizi, hangi araçları kullanacağınızı ve pratik çözümleri adım adım anlatacağım.
1. Bellek Sızıntısı Belirtileri
2. Tespit Yöntemleri ve Araçlar
**1. VisualVM (En Kolay)**
- `jvisualvm` ile bağlanın
- Heap Dump alın
- **Dominator Tree** ve **Leak Suspects** raporunu inceleyin
**2. MAT (Eclipse Memory Analyzer Tool) - En Güçlü**
- Heap Dump alın (`-XX:+HeapDumpOnOutOfMemoryError`)
- MAT ile açın → Leak Suspects raporu
- En çok memory tutan objeleri bulun
**3. JConsole & JMC (Java Mission Control)**
**4. Kod Tarafı Kontroller**
- Static collection’lara (HashMap, List) sürekli ekleme yapmamak
- Thread’leri düzgün kapatmamak
- Inner class’larda outer class referansı tutmak
- Database connection’ları kapatmamak
3. Yaygın Memory Leak Kaynakları
4. Profesyonel Çözüm Adımları
Özet olarak şunu söyleyebilirim.
Bellek sızıntısını önlemenin en iyi yolu: **Dikkatli kod yazmak + Düzenli heap dump analizi**.
Java’da en sık karşılaşılan performans sorunlarından biri **Memory Leak** (Bellek Sızıntısı)dır. Heap memory sürekli artar, Garbage Collector daha sık çalışır ve sonunda OutOfMemoryError alırsınız.
Bu rehberde bellek sızıntısını nasıl tespit edeceğinizi, hangi araçları kullanacağınızı ve pratik çözümleri adım adım anlatacağım.
1. Bellek Sızıntısı Belirtileri
- Heap kullanımı sürekli artar (GC sonrası bile düşmez)
- Full GC sıklaşır ve uygulama yavaşlar
- OutOfMemoryError: Java heap space
- Uygulama uzun süre çalıştıktan sonra performans düşer
2. Tespit Yöntemleri ve Araçlar
**1. VisualVM (En Kolay)**
- `jvisualvm` ile bağlanın
- Heap Dump alın
- **Dominator Tree** ve **Leak Suspects** raporunu inceleyin
**2. MAT (Eclipse Memory Analyzer Tool) - En Güçlü**
- Heap Dump alın (`-XX:+HeapDumpOnOutOfMemoryError`)
- MAT ile açın → Leak Suspects raporu
- En çok memory tutan objeleri bulun
**3. JConsole & JMC (Java Mission Control)**
**4. Kod Tarafı Kontroller**
- Static collection’lara (HashMap, List) sürekli ekleme yapmamak
- Thread’leri düzgün kapatmamak
- Inner class’larda outer class referansı tutmak
- Database connection’ları kapatmamak
3. Yaygın Memory Leak Kaynakları
Kod:
// Klasik Örnek - Static Collection
private static final List<Object> cache = new ArrayList<>();
// ThreadLocal yanlış kullanımı
private static final ThreadLocal<LargeObject> threadLocal = new ThreadLocal<>();
4. Profesyonel Çözüm Adımları
- Heap Dump alın ve MAT ile analiz edin
- WeakReference / SoftReference kullanın (gerektiğinde)
- Try-with-resources ile AutoCloseable objeleri yönetin
- Profiler (YourKit, JProfiler) ile canlı analiz yapın
- Unit test’lerde memory leak testi yazın
Özet olarak şunu söyleyebilirim.
Bellek sızıntısını önlemenin en iyi yolu: **Dikkatli kod yazmak + Düzenli heap dump analizi**.
LOJİSTİK TİM SUNDU

