0Pricing
Go Academy · Ders

Çöp Toplayıcının İç İşleyişi

Üç renkli işaretle-süpür, GOGC ve GC duraklamaları

Çöp Toplayıcının İç İşleyişi, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Üç renkli işaretleme ve süpürme

Go'nun çöp toplayıcısı eşzamanlı üç renkli işaretleme ve süpürme algoritması kullanır. Nesneler beyaz (ziyaret edilmemiş), gri (bulunmuş ancak alt öğeleri taranmamış) veya siyah (tamamen taranmış) olur. Beyaz nesneler süpürme aşamasında çöp kabul edilir.

Eşzamanlı çöp toplama

Go'nun çöp toplayıcısı çoğunlukla uygulama goroutine'leriyle eşzamanlı çalışır. Bu, çoğu programda dünyayı durdurma (STW) duraklamalarını bir milisaniyenin altına indirir.

Yazma bariyeri

Yazma bariyeri, siyah nesnelerin beyaz nesnelere işaret etmemesi değişmezini korumak için eşzamanlı işaretleme aşamasındaki işaretçi yazmalarını araya girerek denetler. Her işaretçi yazmasına küçük bir ek yük getirir.

STW aşamaları

Her çöp toplama döngüsünde iki kısa STW duraklaması vardır: (1) işaretleme kurulumu (yazma bariyerini etkinleştirme, goroutine yığınlarının anlık görüntüsünü alma), (2) işaretlemenin sonlandırılması (tüm gri nesnelerin tarandığından emin olma). P99 genellikle <1ms değerindedir.

GOGC

Çöp toplama tetikleyicisi GOGC tarafından denetlenir (varsayılan değer 100). Bu, "önceki çöp toplama işleminden bu yana canlı öbek boyutu iki katına çıktığında çöp toplamayı çalıştır" anlamına gelir. GOGC=50, daha az bellek kullanarak daha sık çöp toplamayı; GOGC=200 ise daha fazla bellek kullanarak daha seyrek çöp toplamayı tetikler.

GOMEMLIMIT

GOMEMLIMIT (Go 1.19+) yumuşak bir bellek sınırı belirler. Yığın sınıra yaklaştığında, GOGC değerinden bağımsız olarak çöp toplayıcı daha agresif çalışır. Bellek kısıtlamalı ortamlarda OOM nedeniyle sonlandırılmaları önlemek için kullanın.

import "runtime/debug"
debug.SetMemoryLimit(512 * 1024 * 1024)

Çalışma temposu

Çöp toplayıcı, GOGC değerine göre yığın dolmadan işaretlemeyi bitirecek şekilde çalışma temposunu ayarlar. Ayırma hızı yüksekse işaretlemeye yardımcı olan Go rutini sayısını artırır (işaretleme yardımcıları).

runtime.GC()

runtime.GC() çağrısı anında bir çöp toplama döngüsünü zorunlu kılar. Sonlandırıcıların çalıştığından emin olmak için testlerde veya temiz bir yığınla başlamak için kıyaslamalarda kullanışlıdır. Üretimde çağırmayın.

Sonlandırıcılar

Bir nesne çöp toplayıcı tarafından toplandığında çalıştırılacak bir işlevi runtime.SetFinalizer ile kaydedin. Sonlandırıcılar, çöp toplamadan sonra özel bir Go rutininde çalışır. Kaynak temizliği için bunlardan kaçının; bunun yerine Close() yöntemlerini kullanın.

Çöp toplama metrikleri

Çöp toplama istatistiklerini runtime.ReadMemStats üzerinden okuyun veya Prometheus metrikleri aracılığıyla sunun. Temel alanlar: NumGC, PauseNs, HeapAlloc, HeapInuse.

var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("GC cycles: %d, last pause: %dns\n", m.NumGC, m.PauseNs[(m.NumGC+255)%256])

Bellek geri kazanıcısı

Arka plandaki bellek geri kazanıcısı, boşta duran yığın belleğini OS işletim sistemine geri verir. Ön plandaki performansı etkilememek için eşzamanlı çalışır ve çalışma temposunu buna göre ayarlar. MADV_FREE veya MADV_DONTNEED sistem çağrısı kullanılır.

Kısa kontrol

GOMEMLIMIT, Go 1.19+ sürümünde ne yapar?

Özet: Çöp Toplama İç Yapısı

Temel noktalar:

  • Eşzamanlı üç renkli işaretleme ve süpürme; iki kısa STW duraklaması
  • GOGC yığın büyüme oranını denetler; varsayılan değer 100'dür (yüzde 100 büyüme çöp toplamayı tetikler)
  • Konteynerlerde bellek güvenliği için GOMEMLIMIT (Go 1.19+)
  • Çöp toplama metrikleri için runtime.ReadMemStats

Sıkça Sorulan Sorular

“Çöp Toplayıcının İç İşleyişi” dersi ücretsiz mi?

Evet — “Çöp Toplayıcının İç İşleyişi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Çöp Toplayıcının İç İşleyişi” dersinde ne öğreneceğim?

Üç renkli işaretle-süpür, GOGC ve GC duraklamaları Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Çöp Toplayıcının İç İşleyişi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yığın ve Öbek ile Kaçış Çözümlemesi
  2. Go Bellek Modeli ve Happens-Before
  3. Çöp Toplayıcının İç İşleyişi
  4. Ayırmaları Azaltma: sync.Pool ve Arenalar
← Go Academy Sayfasına Dön