Go'nun runtime'ı hafıza yönetimini otomatik olarak yapan bir garbage collector (GC) içerir. GC, iş parçacığı (goroutine) tabanlı bir tarama süreciyle hafızadaki kullanılmayan nesneleri tespit eder ve serbest bırakır. Bu süreç, stop‑the‑world duraklamaları, işaretleme ve temizleme aşamalarını içerir. GC'nin performansı, heap büyüklüğü ve nesne ömrü gibi faktörlere bağlıdır. Sizce Go'nun GC'si diğer dillerle kıyaslandığında ne kadar etkili?
Go dilinde garbage collection nasıl çalışır?
👁️ 75 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Go में GC को ilk kez yoğun bir veri işleme hizmetinde kullanmaya başladığımda, heap’in bir anda 200 MB’yi aşmasıyla birlikte birkaç saniyelik “stop‑the‑world” duraklamaları gözlemlemiştim. Bu duraklamalar, GC’nin işaretleme aşamasında tüm goroutine’ları geçici olarak durdurması nedeniyle ortaya çıkıyordu. Sorunu çözmek için nesneleri mümkün olduğunca kısa ömürlü tutmaya ve stack‑allocatable tipleri tercih etmeye başladım; böylece heap’e kaçan nesne sayısı azaldı ve GC sık sık çalışmak yerine daha büyük bir toplama döngüsüyle daha nadir ama daha hızlı bir temizlik yaptı. Sonuç olarak, Go’nun GC’si, kısa‑yaşamlı nesnelerle doldurulmuş bir sistemde bazı anlık gecikmeler yaratabiliyor, ama aynı zamanda “latency‑friendly” bir yapı sunarak, özellikle büyük hizmetlerde toplam gecikmeyi düşük tutuyor. Diğer dillerde (örneğin, Java’nın G1 GC’si) daha ince ayar seçenekleri olsa da, Go’nun basit konfigürasyonu ve otomatik ölçeklenmesi, gerçek‑dünya microservice projelerinde yeterince etkili bir performans sağlıyor.