Tricolor Garbage Collection algoritması nedir?

Bu algoritmayı buraya taşıma sebebim Golang’ın “Tricolor Mark-And-Sweep Algoritması”nı kullanıyor olması, böylece GO’da işler nasıl yürüyor öğrenirken, yanında genel kültürümüzü de artırmış olacağız.


Tricolor Garbage Collection algoritması nedir?

Bu algoritmayı buraya taşıma sebebim Golang’ın “Tricolor Mark-And-Sweep Algoritması”nı kullanıyor olması, böylece GO’da işler nasıl yürüyor öğrenirken, yanında genel kültürümüzü de artırmış olacağız.

Tricolor Garbage Collection, Türkçe çevirisyle “Üç renkli çöp toplama” algoritması HEAP’de yer alan nesnelerin siyah, beyaz ve gri şeklinde üç gruba ayrılmasına dayanan bir Garbage Collection algoritması. Başlangıçta tüm nesneler beyazdır fakat algoritma tarafından zamanla gri ve ardından siyah kümelere taşınırlar. Toplanabilir kümeler beyaz kümede kalır ve buradan temizlenirler.

Bu renk kümelerinin anlamı

SİYAH: Beyaz kümedeki herhangi bir nesneyi referans gösteren işaretçiler (pointer) içermezler. Siyah gruptaki bir nesnenin beyazdakilerle ilişkisi olmadığı kesindir, ama tam tersi için bir zorunluluk yoktur. Siyah gruptaki hiç bir nesne doğrudan beyaza aktarılmaz.

GRİ: Beyaz kümedeki nesnelere referans gösteren işaretçiler içerebilirler.

BEYAZ: Temizlik için aday durumunda olan fakat siyah ve gri’den erişilme ihtimali de olan nesnelerdir.

Go Garbage Collector işini yapmaya başladığında önce tüm nesneleri beyaz grupta kabul eder ve kök nesnelerin hepsini dolaşarak bunları gri gruba alır. Kök nesneden kasıt uygulama tarafından doğrudan erişilebilen global değişkenler, stackdeki fonksiyonlar vs. vs. gibi nesnelerdir.

Akabinde gri gruptaki bir nesne alınır ve rengi siyaha çevrilir ve beyaz gruptaki herhangi bir nesnenin işaretçisini taşıyor mu buna bakılır. Yani gri bir nesnenin siyah olup olmadığı araştırılırken rengi siyaha çevrilir. Eğer beyazdaki herhangi bir nesneye işaretçisi olduğu bulunursa bu beyaz nesnede gri gruba alınır. (Siyahlar beyaza referans göstermez dedik, griye değil) Bu süreç gri gruptaki tüm nesnelerin üzerinden geçilene kadar devam eder. En sonunda beyazda başka hiç bir nesne ile ilişkisi olmayan nesneler kalır ve artık bu nesneleri hafızadan kaldırmak güvenlidir.

GO Garbage Collector nasıl çalışıyor?

Pusher, 2016 yılında paylaştıkları bir blog yazısında yukarıda anlattığım işaretleme sürecini görselleştirmiş. (Golang’s Real-time GC in Theory and Practice) GoLang’ın Garbage Collector’de kullandığı Tricolor Algoritması sayesinde sağladığı düşük gecikmeler, Haskell’den Go’ya geçiş sebepleri, elde ettikleri pratik sonuçlar vs. gibi derin ve öğretici bu yazıdaki görsel yapıtı basit olarak anlamak için de çok faydalı.

Bu algoritmayı bilmek neden önemli?

Amacımız bu algoritmayı aktif şekilde uyarlamak, tüm tasarımımızı buna göre yapmak, hatta geliştirip daha iyi hale getirmek değil. Zaten daha ayrıntılı öğrenmek isterseniz akademik yayınlar, ileri seviye yazılım hatta donanım bilgisi gereksinimi, saatler süren okumalar vs karşınıza çıkacak.

Bu yazıdaki amacımız Garbage Collector’ün temizliği nasıl yaptığını anlamak, nesnelerin beyaz gruba girmeleri gerektiğini farkında olmaktı. Açıkçası ben de daha fazlası ile ilgilenmiyorum. Garbage Collector çalışma mantığını tamamen göz ardı edersek programımızın düşük performansı, yüksek kaynak (hafıza) kullanımı vs. sorunların sebeplerini de anlayamayız. İhtiyacımız olmayan bir nesne, siyah veya gri bir nesne tarafından referans gösterildiği için hiç bir zaman beyaz gruba alınmayabilir. Hafıza yönetimini Go yapsa da, ona doğru yolu göstermek bizim işimiz.

Ben daha fazlasını öğrenmek isterim derseniz

James Fisher’in konuyla ilgili videolarını tavsiye edebilirim.

Ardan Labs’ın yazı dizisini faydalı bulabilirsiniz.

Vincent Blanchon’un şu yazısını beğendebilirsiniz.

Kapak Fotoğrafı Lara Jameson

Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.

Bir soru, öneri ya da yorumunuz mu var?

Evren Bal

Ben Evren BAL

1996'dan beri ‘Internet canlısıyım!’

Evren Bal Hakkında daha fazla bilgi.

Tanışmak isterseniz hemen sosyal medyadan iletişime geçebilirsiniz.

Bana Ulaşın

Bana Ulaşın

  • Bir sorunuz mu var?
  • Yazıda bir hata mı farkettiniz?
  • Sayfa ile ilgili bir öneriniz mi var?
  • Yazmamı önereceğiniz bir konu mu var?

Lütfen iletişim formunu kullanarak veya sosyal medya hesaplarımdan bana ulaşın.

Digital Ocean Logo

VPS sunucusu denemek ister misiniz?

Digital Ocean'a referans bağlantımdan kayıt olarak yeni oluşturacağınız hesabınızı 60 gün geçerli 100$ kredi ile açabilirsiniz. Bu miktar yüksek performanslı VPS'leri bile denemeniz için yeterlidir.

Yapacağınız onca kurulumun boşa gitmemesi için benim tavsiyem uzun vadede kullanabileceğiniz özellik ve maliyetlerde bir sunucu oluşturmanızdır.

Ücretsiz 100$ kredi bağlantısı

60 günlük denemeniz sonunda eğer devam etmek istemezseniz hiç bir ücret ödemeyeceksiniz. Hizmeti kullanmaya devam etmek isterseniz harcamanız 25$'a ulaştığında benim hesabıma da 25$ kredi yüklenecektir.

Diğer bir deyişle, siz 100$ ücretsiz krediyi her halükarda kazanırken, daha sonra ücretli devam etmeye karar verirseniz ben de 25$ kredi kazanacağım.

Copyright © 2022 - Evren BAL