Hoşgeldin Misafir

Java Garbage Collector nasıl hızlandırılır? (G1 vs ZGC)

hakantopuzoglu

25 May 2018
2,233 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
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.

3FUU4Xy.png



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

btn1pyf.png