hakantopuzoglu
- 25 May 2018
- 2,233 Mesaj
- TIM Görevleri
- 1
Aktiflik
Seviye
Deneyim
Java Garbage Collector nasıl hızlandırılır? (G1 vs ZGC)
Herkese Merhaba,
Java’da performansın en kritik noktalarından biri **Garbage Collector**’dır. Özellikle büyük heap’lerde, düşük latency gerektiren uygulamalarda (mikroservis, trading, oyun sunucusu vb.) GC duraklamaları büyük sorun meydana getirir.
Bu paylaşımda **G1 GC** ve **ZGC**’yi detaylı karşılaştıracak, nasıl daha hızlı hale getirebileceğimizi pratik tuning önerileriyle anlatacağız.
1. Garbage Collector Türleri (Kısa Karşılaştırma)
2. G1 GC’yi Hızlandırma (Tuning)
**İyi Pratikleri:**
- Heap boyutunu çok büyük tutmayın (32GB altı önerilir)
- `-XX:InitiatingHeapOccupancyPercent=45` ile erken GC tetikleyin
- Young/Old ratio’yu izleyin
3. ZGC’yi Etkin Kullanma
**ZGC Avantajları:**
- Milisaniyenin altında duraklama
- 64TB’a kadar heap desteği
- Renkli pointer (colored pointers) teknolojisi
**Dezavantajı:** Throughput biraz daha düşük olabilir.
4. Genel Performans İyileştirme Önerileri
Hangi Durumda Hangisini Kullanmalısınız?
- **G1 GC** → Orta seviye uygulamalar, dengeli performans
- **ZGC** → Çok düşük latency kritikse (finans, oyun, real-time sistemler)
Herkese Merhaba,
Java’da performansın en kritik noktalarından biri **Garbage Collector**’dır. Özellikle büyük heap’lerde, düşük latency gerektiren uygulamalarda (mikroservis, trading, oyun sunucusu vb.) GC duraklamaları büyük sorun meydana getirir.
Bu paylaşımda **G1 GC** ve **ZGC**’yi detaylı karşılaştıracak, nasıl daha hızlı hale getirebileceğimizi pratik tuning önerileriyle anlatacağız.
1. Garbage Collector Türleri (Kısa Karşılaştırma)
- **G1 GC** → Default (Java 9+), dengeli, bölgesel (region) toplama
- **ZGC** → Ultra düşük duraklama (<1ms), büyük heap’ler için tasarlandı (Java 15+)
- **Shenandoah** → ZGC’ye benzer düşük latency alternatifi
- **Parallel GC** → Yüksek throughput, latency önemsizse
2. G1 GC’yi Hızlandırma (Tuning)
Kod:
// En sık kullanılan flag’ler
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200 // Hedef duraklama süresi
-XX:G1HeapRegionSize=16M // Region boyutu
-XX:ConcGCThreads=4 // Concurrent thread sayısı
-XX:ParallelGCThreads=8
-XX:+UseStringDeduplication
**İyi Pratikleri:**
- Heap boyutunu çok büyük tutmayın (32GB altı önerilir)
- `-XX:InitiatingHeapOccupancyPercent=45` ile erken GC tetikleyin
- Young/Old ratio’yu izleyin
3. ZGC’yi Etkin Kullanma
Kod:
// ZGC Aktif Etme
-XX:+UseZGC
-Xmx32G
-XX:ZCollectionInterval=10 // Kolay tuning
-XX:+ZUncommit // Belleği geri bırakma
**ZGC Avantajları:**
- Milisaniyenin altında duraklama
- 64TB’a kadar heap desteği
- Renkli pointer (colored pointers) teknolojisi
**Dezavantajı:** Throughput biraz daha düşük olabilir.
4. Genel Performans İyileştirme Önerileri
- Uygun GC seçimi yapın (G1 → Genel, ZGC → Low Latency)
- `-XX:+HeapDumpOnOutOfMemoryError` ile sorunları tespit edin
- VisualVM, JMC, GC logs ile izleyin
- Object allocation’ı azaltın (String + immutable objeler)
- `-XX:+UseLargePages` ile büyük sayfalar kullanın
Hangi Durumda Hangisini Kullanmalısınız?
- **G1 GC** → Orta seviye uygulamalar, dengeli performans
- **ZGC** → Çok düşük latency kritikse (finans, oyun, real-time sistemler)
LOJİSTİK TİM SUNDU

