JVM çöp toplama algoritmalarında G1 GC bölge tabanlı heap mimarisi, CMS ve Parallel GC nesil (generation) bazlı sabit bölümlerin yerine dinamik bölgelere geçişi temsil eder. Bu mimari seçimi, GC duraklatma sürelerini hedef odaklı biçimde kontrol etmeyi mümkün kılar. G1 GC (Garbage First), heap'i eşit boyutlu bölgelere (region) böler; varsayılan boyut 1MB - 32MB arasındadır ve `-XX:G1HeapRegionSize` ile ayarlanır. Bölgeler dinamik olarak Eden, Survivor, Old ve Humongous rollerini üstlenir. Humongous bölgeler, tek bir bölgenin %50'sinden büyük nesneler için ayrılır ve doğrudan Old Gen'e atanır. G1'in temel mekanizması Remembered Set (RSet) üzerine kuruludur. Her bölge, kendisine referans veren diğer bölgeleri RSet'te kaydeder. Bu sayede kısmi koleksiyon (Mixed GC) sırasında tüm heap taranmak zorunda kalmaz; yalnızca seçilen bölgeler ve bunların RSet referansları işlenir. G1 GC bölge tabanlı heap tasarımında bölge seçimi, canlı nesne oranına göre yapılır, en az canlı içeren bölgeler önce toplanır (Garbage First adının kökeni budur). Pause hedef parametresi `-XX:MaxGCPauseMillis=200` (varsayılan) ile belirlenir. G1, bu hedefe ulaşmak için her GC döngüsünde kaç bölge toplayacağını dinamik olarak belirler. Bu yaklaşım kesin garanti vermez ama istatistiksel olarak hedefi karşılar. ZGC ise farklı bir tasarım kararı alır: load barrier ve colored pointers kullanarak GC'nin büyük bölümünü uygulama thread'leriyle eş zamanlı yürütür. ZGC'de duraklatma süresi nesne sayısından bağımsız olarak sabit kalır (~1-3ms). Bu özelliğin bedeli, pointer boyutunun 64-bit'e sabitlenmesidir; 32-bit pointer optimizasyonları kullanılamaz. ZGC heap'i bölgelere böler ancak G1'den farklı olarak bölge boyutları esnek üç kategoride gruplandırılır: - Small: 2MB (küçük nesneler) - Medium: 32MB - Large: nesne boyutuna göre değişken Güncel JDK sürümlerinde ZGC Generational modda da çalışabilir (`-XX:+UseZGC -XX:+ZGenerational`). Bu mod, kısa ömürlü nesneleri ayrı genç nesil bölgelerinde tutarak throughput'u iyileştirir. G1 vs ZGC seçim rehberi: - Heap < 4GB ve latency toleransı > 50ms → G1 yeterli - Heap > 16GB veya p99 latency < 10ms hedefi → ZGC güçlü aday - Throughput öncelikli batch workload → Parallel GC hâlâ rekabetçi Tuning ipuçları: G1'de `-XX:G1NewSizePercent` ve `-XX:G1MaxNewSizePercent` parametreleriyle Eden boyutu sınırlandırılabilir. `GCPauseIntervalMillis` ise GC frekansını ayarlar. ZGC'de tuning alanı minimal olarak tasarlanmıştır; heap boyutu ve thread sayısı ötesinde parametre gerektirmez.