[{"data":1,"prerenderedAt":478},["ShallowReactive",2],{"post-\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir":3},{"page":4,"translation":304,"nav":321,"related":450,"random":465},{"id":5,"title":6,"body":7,"categories":302,"category":304,"date":305,"description":306,"draft":307,"extension":308,"image":309,"kind":304,"lang":73,"meta":310,"navigation":311,"path":312,"readingTime":297,"seo":313,"slug":314,"stem":315,"tags":316,"translationKey":314,"type":303,"updated":319,"__hash__":320},"postsTr\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir.md","Tricolor Garbage Collection Algoritması Nedir?",{"type":8,"value":9,"toc":292},"minimark",[10,55,58,61,66,129,131,136,139,142,197,199,203,206,209,226,233,235,239,242,245,247,251,279,284],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,43,49],"ul",{},[25,26,27,30,31,34,35,38,39,42],"li",{},[18,28,29],{},"Tricolor Nedir?:"," Bellekteki (heap) nesneleri ",[18,32,33],{},"Siyah",", ",[18,36,37],{},"Gri"," ve ",[18,40,41],{},"Beyaz"," olmak üzere üç renk kümesine ayırarak çalışan eşzamanlı (concurrent) bir çöp toplama (garbage collection) algoritmasıdır.",[25,44,45,48],{},[18,46,47],{},"Go Entegrasyonu:"," Go, program akışını durdurma süresini (stop-the-world) milisaniyelerin altına indirmek için bu algoritmayı \"write barrier\" mekanizması ile birlikte eşzamanlı olarak kullanır.",[25,50,51,54],{},[18,52,53],{},"Temel Mantık:"," Kök nesnelerden (stack, global vb.) başlanarak ulaşılan tüm aktif nesneler işaretlenir; süreç bittiğinde beyaz kümede kalan (köklerden erişilemeyen) nesneler bellekten silinir.",[14,56,57],{},"Bu algoritmayı incelememizin temel sebebi, Go (Golang) dilinin çalışma zamanında (runtime) \"Tricolor Mark-and-Sweep\" algoritmasını kullanıyor olmasıdır. Go'da bellek yönetiminin arka planda nasıl çalıştığını öğrenirken genel kültürümüzü de artırmış olacağız.",[59,60],"hr",{},[62,63,65],"h3",{"id":64},"renk-kümeleri-ve-durumları","Renk Kümeleri ve Durumları",[67,68,69,86],"table",{},[70,71,72],"thead",{},[73,74,75,80,83],"tr",{},[76,77,79],"th",{"align":78},"left","Renk",[76,81,82],{"align":78},"Anlamı",[76,84,85],{"align":78},"Açıklama",[87,88,89,103,116],"tbody",{},[73,90,91,97,100],{},[92,93,94],"td",{"align":78},[18,95,96],{},"Siyah (Black)",[92,98,99],{"align":78},"Canlı \u002F Ziyaret Edilmiş",[92,101,102],{"align":78},"Kendisine ulaşılan ve tüm alt\u002Fbağlı referansları da gri kümesine taşınmış olan kesinlikle canlı nesneler.",[73,104,105,110,113],{},[92,106,107],{"align":78},[18,108,109],{},"Gri (Grey)",[92,111,112],{"align":78},"Ziyaret Edilmekte",[92,114,115],{"align":78},"Kendisine ulaşılan ancak alt\u002Fbağlı referansları henüz taranmamış olan geçiş nesneleri.",[73,117,118,123,126],{},[92,119,120],{"align":78},[18,121,122],{},"Beyaz (White)",[92,124,125],{"align":78},"Aday \u002F Erişilemeyen",[92,127,128],{"align":78},"Başlangıçta tüm nesneler buradadır. Tarama bittiğinde gri veya siyah olamayanlar bellekten silinir.",[59,130],{},[132,133,135],"h2",{"id":134},"tricolor-algoritmasının-çalışma-mantığı","Tricolor Algoritmasının Çalışma Mantığı",[14,137,138],{},"Tricolor Garbage Collection (Üç Renkli Çöp Toplama) algoritması, heap bellekte yer alan nesnelerin siyah, beyaz ve gri şeklinde üç gruba ayrılmasına dayanır. Başlangıçta tüm nesneler beyazdır, ancak algoritma çalıştırıldıkça griye ve ardından siyah kümelere taşınırlar.",[14,140,141],{},"Süreç adım adım şu şekilde ilerler:",[143,144,145,154,163,185],"ol",{},[25,146,147,150,151,153],{},[18,148,149],{},"Başlangıç:"," Go Garbage Collector çalışmaya başladığında, öncelikle tüm nesneleri ",[18,152,41],{}," grupta kabul eder.",[25,155,156,159,160,162],{},[18,157,158],{},"Köklerin Keşfi (Roots):"," Uygulama tarafından doğrudan erişilebilen kök nesneler (global değişkenler, stack'teki yerel değişkenler, CPU register'larındaki referanslar vb.) taranır ve bu nesneler ",[18,161,37],{}," gruba alınır.",[25,164,165,168],{},[18,166,167],{},"İşaretleme (Marking Phase):",[22,169,170,176,182],{},[25,171,172,173,175],{},"Gri gruptan bir nesne seçilir ve rengi ",[18,174,33],{}," yapılır.",[25,177,178,179,181],{},"Bu nesnenin referans gösterdiği (pointer'ı olan) tüm beyaz nesneler tespit edilerek ",[18,180,37],{}," gruba taşınır.",[25,183,184],{},"Bu işlem, gri grupta hiçbir nesne kalmayana kadar döngüsel olarak devam eder.",[25,186,187,190,191,193,194,196],{},[18,188,189],{},"Süpürme (Sweep Phase):"," Gri küme tamamen boşaldığında, köklerden erişilebilen tüm canlı nesneler ",[18,192,33],{}," kümeye taşınmış olur. Geriye kalan ve hiçbir şekilde erişilemeyen tüm nesneler ise ",[18,195,41],{}," kümede kalır. Beyaz kümedeki nesnelerin (kendi aralarında dairesel referansları olsa dahi) tamamı bellekten güvenle temizlenir.",[59,198],{},[132,200,202],{"id":201},"eşzamanlılık-ve-yazma-bariyeri-write-barrier","Eşzamanlılık ve Yazma Bariyeri (Write Barrier)",[14,204,205],{},"Go'nun çöp toplayıcısı, programın çalışmasını uzun süre durdurmamak (low latency) için program akışıyla eşzamanlı (concurrent) olarak çalışır. Ancak bu durum teknik bir problemi beraberinde getirir: Çöp toplayıcı tarama yaparken, çalışan uygulama programı (mutator) yeni nesne atamaları yapabilir.",[14,207,208],{},"Örneğin:",[22,210,211,220],{},[25,212,213,214,216,217,219],{},"Taraması bitmiş ve ",[18,215,33],{}," olarak işaretlenmiş bir nesne, yeni oluşturulan bir ",[18,218,41],{}," nesneye referans gösterebilir.",[25,221,222,223,225],{},"Aynı anda, bu beyaz nesneyi tutan ",[18,224,37],{}," nesne ile olan bağ kopabilir.",[14,227,228,229,232],{},"Yazma bariyeri olmasaydı, çöp toplayıcı gri nesneleri tarayıp bitirdiğinde bu beyaz nesneye ulaşamayacak ve onu canlı olmasına rağmen yanlışlıkla bellekten silecekti. Go, bunu önlemek için ",[18,230,231],{},"Yazma Bariyeri (Write Barrier)"," mekanizmasını kullanır. Program çalışırken bir pointer ataması yapıldığında, yazma bariyeri araya girerek hedeflenen beyaz nesneyi otomatik olarak gri kümesine taşır ve veri kayıplarının önüne geçer.",[59,234],{},[132,236,238],{"id":237},"bu-algoritmayı-bilmek-neden-önemli","Bu Algoritmayı Bilmek Neden Önemli?",[14,240,241],{},"Amacımız bu algoritmayı sıfırdan yazmak veya özelleştirmek değildir. Ancak Garbage Collector'ün çalışma mantığını tamamen göz ardı edersek, uygulamalarımızdaki düşük performansın veya yüksek bellek (memory leak) kullanımının nedenlerini tespit edemeyiz.",[14,243,244],{},"Örneğin, ihtiyacımız kalmayan büyük bir nesne, siyah veya gri kümedeki canlı bir nesne tarafından referans gösterilmeye devam ediyorsa hiçbir zaman beyaz gruba düşmez ve bellekten silinmez. Bellek yönetimini Go bizim yerimize yapsa da, ona doğru referans yapılandırmasını sunarak doğru yolu göstermek bizim işimizdir.",[59,246],{},[132,248,250],{"id":249},"daha-fazla-öğrenmek-i̇steyenler-i̇çin","Daha Fazla Öğrenmek İsteyenler İçin",[22,252,253,265,272],{},[25,254,255],{},[256,257,264],"a",{"href":258,"rel":259,"target":263},"https:\u002F\u002Fjameshfisher.com\u002Fspeaking\u002F",[260,261,262],"nofollow","noopener","noreferrer","_blank","James Fisher'ın Konuyla İlgili Sunumları",[25,266,267],{},[256,268,271],{"href":269,"rel":270,"target":263},"https:\u002F\u002Fwww.ardanlabs.com\u002Fblog\u002F2018\u002F12\u002Fgarbage-collection-in-go-part1-semantics.html",[260,261,262],"Ardan Labs - Garbage Collection in Go Part 1",[25,273,274],{},[256,275,278],{"href":276,"rel":277,"target":263},"https:\u002F\u002Fmedium.com\u002Fa-journey-with-go\u002Fgo-how-does-the-garbage-collector-mark-the-memory-72cfc12c6976",[260,261,262],"Vincent Blanchon - Go: How Does the Garbage Collector Mark the Memory?",[280,281,283],"h5",{"id":282},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,285,286,289],{},[25,287,288],{},"21.06.2026: \"İlişkisi kalmayan nesneler silinir\" ifadesindeki teknik tanım hatası \"kökten erişilemeyen nesneler\" olarak düzeltildi. Go'nun eşzamanlı yapısındaki \"Yazma Bariyeri\" (Write Barrier) mekanizması açıklandı. İmla hataları giderildi, karşılaştırma tablosu ve özet eklendi. Telif uyarısı içeren görsel kredi satırı kaldırıldı.",[25,290,291],{},"11.05.2022: Yazı özeti düzenlendi.",{"title":293,"searchDepth":294,"depth":294,"links":295},"",2,[296,298,299,300,301],{"id":64,"depth":297,"text":65},3,{"id":134,"depth":294,"text":135},{"id":201,"depth":294,"text":202},{"id":237,"depth":294,"text":238},{"id":249,"depth":294,"text":250},[303],"technical",null,"2021-10-01","Go (Golang) tarafından kullanılan Tricolor Mark-and-Sweep çöp toplama algoritmasının çalışma mantığını, renk kümesi kurallarını ve yazma bariyeri kavramını öğrenin.",false,"md","\u002Fimages\u002Fhero\u002Ftricolor-gc.avif",{},true,"\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir",{"title":6,"description":306},"tricolor-garbage-collection-algoritmasi-nedir","tr\u002Ftricolor-garbage-collection-algoritmasi-nedir",[317,318],"go","devops","2026-06-21","SRsPgY62KmzilAKXbXVYOpj6HiHLzhU55Q1wWXsWbHs",{"prev":322,"next":325,"others":328,"lucky":447,"readingTime":297},{"path":323,"title":324},"\u002Ftr\u002Fgarbage-collection-ve-golang","Garbage Collection ve Go (Golang)",{"path":326,"title":327},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",[329,332,335,338,341,344,345,348,351,354,357,360,363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417,420,423,426,429,432,435,438,441,444],{"path":330,"title":331},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method Tasarım Deseni Nedir?",{"path":333,"title":334},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy Tasarım Deseni Nedir?",{"path":336,"title":337},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":339,"title":340},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",{"path":342,"title":343},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":326,"title":327},{"path":346,"title":347},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":349,"title":350},"\u002Ftr\u002Fwordpress-yonetici-sifresini-wp-cli-kullanarak-sifirlama","WordPress Yönetici Şifresini WP-CLI Kullanarak Sıfırlama",{"path":352,"title":353},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite Tasarım Deseni Nedir?",{"path":355,"title":356},"\u002Ftr\u002Fphp-generator-ve-iterator-farki","PHP'de Generator ve Iterator Arasındaki Temel Farklar",{"path":358,"title":359},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":361,"title":362},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator Tasarım Deseni Nedir?",{"path":364,"title":365},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":367,"title":368},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator Tasarım Deseni Nedir?",{"path":370,"title":371},"\u002Ftr\u002Ftailwind-css-just-in-time-modu","Tailwind CSS Just-in-Time (JIT) Modu Nedir?",{"path":373,"title":374},"\u002Ftr\u002Frest-api-tasarimi","REST API Tasarım İncelikleri",{"path":376,"title":377},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":379,"title":380},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method Tasarım Deseni Nedir?",{"path":382,"title":383},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":385,"title":386},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":388,"title":389},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":391,"title":392},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":394,"title":395},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade Tasarım Deseni Nedir?",{"path":397,"title":398},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder Tasarım Deseni Nedir?",{"path":400,"title":401},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":403,"title":404},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":406,"title":407},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı",{"path":409,"title":410},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":412,"title":413},"\u002Ftr\u002Fvue-js-nedir","Vue.js Nedir? Yeni Başlayanlar İçin Rehber",{"path":415,"title":416},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":418,"title":419},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":421,"title":422},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...",{"path":424,"title":425},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":427,"title":428},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":430,"title":431},"\u002Ftr\u002Frestapi-ve-hateoas-kavrami","RestApi ve HATEOAS Kavramı",{"path":433,"title":434},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter Tasarım Deseni Nedir?",{"path":436,"title":437},"\u002Ftr\u002Fmutable-ve-immutable-kavrami","Mutable ve Immutable Kavramları Nedir?",{"path":439,"title":440},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge Tasarım Deseni Nedir?",{"path":442,"title":443},"\u002Ftr\u002Fdocker-nedir","Docker Nedir?",{"path":445,"title":446},"\u002Ftr\u002Ftailwind-css-nerede-kullanilir-tailwind-css-nerede-kullanilmaz","Tailwind CSS Nerede Kullanılır? Tailwind CSS Nerede Kullanılmaz?",{"path":448,"title":449},"\u002Ftr\u002Fjwt-guvenli-mi-guvenlik-acigi-olusturmayin","JWT Güvenli Derken Güvenlik Açığı Oluşturmayın",[451,455,459,461],{"path":452,"title":453,"date":454},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu","2026-06-20",{"path":456,"title":457,"date":458},"\u002Ftr\u002Fself-hosted-api-gateway-nasil-kurulur-kapsamli-rehber","Self-Hosted API Gateway Nasıl Kurulur? Kapsamlı Rehber","2023-01-12",{"path":403,"title":404,"date":460},"2021-10-14",{"path":462,"title":463,"date":464},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map","2021-10-13",[466,470,474],{"path":467,"title":468,"date":469},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype Tasarım Deseni Nedir?","2021-08-16",{"path":471,"title":472,"date":473},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?","2021-02-04",{"path":475,"title":476,"date":477},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi","2021-02-15",1782142006488]