Garbage Collection Türleri: G1GC, ZGC, Shenandoah Karşılaştırması

# Garbage Collection Türleri: G1GC, ZGC, Shenandoah Karşılaştırması

Java uygulamaları çalışırken hafızada kullanılmayan nesneler birikir. Garbage Collection (GC) bunları temizler. Ancak temizleme sırasında uygulama durur, buna "pause time" denir. Farklı GC'ler, pause time ile performans (throughput) arasında farklı dengeler kurar.

G1GC (Garbage First): Java 9'dan varsayılan. Orta boyut uygulamalar için ideal. Heap'i bölgelere ayırır, en çok çöp olan bölgeleri önce temizler.

ZGC: Ultra düşük pause time (≤10ms). Büyük heap'ler (TB ölçeğinde) için. Pause time garantili.

Shenandoah: Benzer şekilde düşük pause time. OpenJDK'de. Daha az hafıza overhead'i.

| Özellik | G1GC | ZGC | Shenandoah |
|---------|------|-----|------------|
| Pause Time | 50-200ms | <10ms | <10ms |
| Heap Boyutu | 4GB-40GB | 4TB+ | 4GB-40GB |
| CPU Overhead | Orta | Yüksek | Orta-Yüksek |
| Uygun Senaryolar | Web uygulamaları | Fintech, trading | Düşük latency |

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Aşağıdaki Java programı farklı GC'lerle çalıştırabilirsin:

1public class GCTest {
2public static void main(String[] args) {
3System.out.println("GC Test Başladı");
4long startTime = System.currentTimeMillis();
5
6// Çok sayıda nesne oluştur
7for (int i = 0; i < 1_000_000; i++) {
8byte[] temp = new byte[1024]; // 1KB nesneler
9}
10
11long duration = System.currentTimeMillis() - startTime;
12System.out.println("Süre: " + duration + "ms");
13System.out.println("Aktif GC: " +
14ManagementFactory.getGarbageCollectorMXBeans().stream().filter(gc -> gc.getCollectionCount() > 0).map(gc -> gc.getName()).findFirst().orElse("Bilinmiyor"));
15}
16}

Çalıştırma komutları:

1# G1GC ile (varsayılan Java 9+)
2java -XX:+UseG1GC GCTest
3
4# ZGC ile
5java -XX:+UseZGC GCTest
6
7# Shenandoah ile
8java -XX:+UseShenandoahGC GCTest

Beklenen çıktı:

1GC Test Başladı
2Süre: 45ms
3Aktif GC: G1 Young Generation

- G1GC: Standart web uygulamaları, microservices. Ayarlama gerekli değil.
- ZGC: Real-time sistemler, yüksek throughput gereken uygulamalar.
- Shenandoah: Düşük latency ama sınırlı hafıza, OpenJDK kullanıyorsan.

GC loglarını görmek için -XX:+PrintGCDetails -XX:+PrintGCDateStamps ekle.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz