Sobes.tech
Middle+

Чӣ тавр кор мекунад ҷамъоварии партовҳо дар забони барномасозии Go?

sobes.tech AI

Ҷавоб аз AI

Гаражны зборшчык у Go заснаваны на маркіруюча-выдаляльным алгарытме з трыгерам па выдзяленні памяці. Ён працуе паралельна з асноўнай праграмай і мінімізуе паязы.

Асноўныя моманты:

  • Тры наборы колераў:
    • Белы: Аб'екты, якія не былі наведаныя і магчыма з'яўляюцца сметай.
    • Шэры: Аб'екты, даступныя з каранёў, але яшчэ не прасканаваныя.
    • Чорны: Аб'екты, даступныя з каранёў і ўжо прасканаваныя.
  • Маркіроўка: Зборшчык пачынаецца з каранёў (глабальных зменных, стеку кожнай горутыны), адзначаючы даступныя аб'екты як шэрыя. Затым ён рэкурсіўна скануе шэрыя аб'екты, адзначае дасягальныя з іх як шэрыя, а скануемыя аб'екты становяцца чорнымі.
  • Фаза STW (Stop-The-World) падчас маркіроўкі: Кароткая спыненне выканання ўсіх горутин у пачатку маркіроўкі для стварэння здымка графа аб'ектаў і ў канцы для пераключэння стану.
  • Паралельная маркіроўка: Асноўная частка маркіроўкі выконваецца паралельна з працай праграмы.
  • Выдаленне: Пасля маркіроўкі ўсе аб'екты, якія засталіся белымі, лічацца недаступнымі і вызваляюцца. Go не патрабуе відавочнага абнулення ўказальнікаў.
// Прыклад: калі аб'ект становіцца недаступным
type Data struct {
    value int
}

func main() {
    d1 := &Data{value: 10} // Аб'ект створаны, даступны
    _ = d1                 // Выкарыстанне аб'екта

    d1 = nil // Аб'ект больш недаступны з пераменнай d1.
            // Зборшчык смецця можа яго вызваліць пры наступным цыкле.

    // Іншыя аб'екты, на якія ніхто не спасылаецца, таксама могуць быць сабраны.
}
  • Трыгер: Зборшчык запускаецца, калі аб'ём выдзеленага памяці перавышае пэўны парог, залежны ад папярэдняга аб'ёму выдзеленага памяці. Па змаўчанні гэты парог у два разы больш за папярэдні выкарыстаны аб'ём памяці.
  • Мэта: Падтрымліваць нізкую затрымку, пазбягаючы працяглых паязоў "Stop-The-World".
// Можна кіраваць паводзінамі зборшчыка з дапамогай зменных асяроддзя
// 예를 들어, GOGC=off를 설정하면 가비지 수집이 비활성화됩니다.

У цэлым, зборшчык смецця Go эфектыўны і патрабуе мінімальнага ўдзелу распрацоўніка.