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 |
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();56// Çok sayıda nesne oluştur7for (int i = 0; i < 1_000_000; i++) {8byte[] temp = new byte[1024]; // 1KB nesneler9}1011long 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 GCTest34# ZGC ile5java -XX:+UseZGC GCTest67# Shenandoah ile8java -XX:+UseShenandoahGC GCTestBeklenen çıktı:
1GC Test Başladı2Süre: 45ms3Aktif 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.
0 yorum